如何改写WebApi部分默认规则
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何改写WebApi部分默认规则相关的知识,希望对你有一定的参考价值。
参考技术A 1、不再限制控制器必须以Controller结尾,其实这个并不是必须,只是被限制着确实不太舒服。2、所有方法可以响应所有的请求方法,如果存在方法名相同的方法,那么才需要特性来区分。
3、Action中的参数优先从Url中获取,再从Body中获取,从Body中获取的时候,优先假设Body中的数据是表单参数,若不是则将Body中的数据当作json或xml数据进行获取。 参考技术B string;= 0)
lock (_desriptors)
if (_desriptors;
IDictionarylt.IsDynamic);
public ControllerSelector(HttpConfiguration config)
_config = config.Where(x =.Get(; _desriptors = new Dictionarylt;
var descriptors = new Dictionarylt;
foreach (var ass in assemblies)
controllerTypes对控制器的限制
public class ControllerSelector .GetRouteData();)).Web;
var controllerTypes = new Listlt.Values;
public IDictionarylt;
return _desriptors;typeof(ApiController);(), HttpControllerDescriptor;= 0)
var assemblies = AppDomain.Controllers;string.Count lt.GetExportedTypes();
foreach (var controllerType in controllerTypes)
var descriptor = new HttpControllerDescriptor(_config, HttpControllerDescriptor;controller.GetAssemblies();
void InitControllers()
if (_desriptors!x.Count lt.IsNullOrWhiteSpace(controllerName))
throw new ArgumentException(string.Where(x =, HttpControllerDescriptor, controllerType)!x;(StringComparer, HttpControllerDescriptor;
if (string.Http;
_desriptors.HttpRequestMessage request)
InitControllers(), controllerType.HttpControllerDescriptor SelectController(System;().OrdinalIgnoreCase).Net.CurrentDomain.Name, descriptor);)); ;string.GlobalAssemblyCache .Add(descriptor;
public System.ControllerName;Type.AddRange(ass;没有在路由信息中找到controller.IsAssignableFrom(x)));string: IHttpControllerSelector
HttpConfiguration _config.Http;
var controllerName = Convert;
var routeData = request.ToString(routeData.Format(; GetControllerMapping()
InitControllers()本回答被提问者采纳
如何动态改写 Jetty 的 URL 处理规则?
【中文标题】如何动态改写 Jetty 的 URL 处理规则?【英文标题】:How to dynamically rewrite Jetty's URL handling rule? 【发布时间】:2019-12-23 17:46:32 【问题描述】:我有一个现有的 Jetty web 应用程序项目,其中 webapps 文件夹设置如下:
webapps
|
| root
|
| icons
|
| a.jpg
我可以通过访问此 URL 访问a.jpg
:
http://localhost/icons/a.jpg
我猜这是 Jetty 中可以提供静态内容的默认根文件夹?因为我在任何配置文件中都找不到对“根”文件夹的任何引用。
我想动态更改这个“根”文件夹的位置,这样我就可以这样做(伪代码)
setRoot("C:/myNewRoot/icons")
当我转到http://localhost/icons/a.jpg
时,它会提供C:/myNewRoot/icons/a.jpg
而不是webapps/root/icons/a.jpg
我猜这将涉及某种servlet
和servlet-mapping
来处理/icons/*
,但我不知道如何处理。
这可能吗?
【问题讨论】:
【参考方案1】:您无法更改 WebApp / War 文件的基本资源,而不会破坏 WebApp 所依赖的所有其他内容。
至于“root”和“ROOT”作为可部署名称的含义……
https://www.eclipse.org/jetty/documentation/current/automatic-webapp-deployment.html https://www.eclipse.org/jetty/documentation/current/configuring-contexts.html#usng-the-context-provider【讨论】:
如果我不需要更改整个root
文件夹,只需更改icons
位置和URL 处理,可以吗? IE。默认情况下,访问http://localhost/icons/*
将提供来自webapps/root/icons
的静态文件,但是否可以动态更改该 URL 以从其他地方提供图标?以上是关于如何改写WebApi部分默认规则的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET WebApi:如何使用 WebApi HttpClient 通过文件上传执行多部分发布
如何在潜在危险请求的情况下覆盖来自 WebAPI 的默认 HTML 页面响应