如何改写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

我猜这将涉及某种servletservlet-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 页面响应

webapi 接口规则

WebApi接口 - 如何在应用中调用webapi接口

ASP.NET WebApi 从入门到"放弃"系列---WebApi 请求路由

asp.net WebApi 使用总结