Asp.net web api 属性路由更改WebAPI管道

Asp.net web api 属性路由更改WebAPI管道,asp.net-web-api,routes,asp.net-web-api-routing,attributerouting,Asp.net Web Api,Routes,Asp.net Web Api Routing,Attributerouting,我有一个.NETWebAPI解决方案。我限制了对HTTPS的访问,但有条件地允许HTTP流量。其中一个条件是,所有HTTP请求都必须使用HTTP POST方法,传递x-HTTP-method-override头以提供所需的方法,以便正确路由请求。我已经配置了一个全局DelegatingHandler,以验证所有传入请求,并在需要时执行重定向 使用标准路由,一切都很好。当我配置属性时,运行的东西会出轨。似乎AttributeRouting试图在DelegatingHandler修改请求之前定位路由

我有一个.NETWebAPI解决方案。我限制了对HTTPS的访问,但有条件地允许HTTP流量。其中一个条件是,所有HTTP请求都必须使用HTTP POST方法,传递
x-HTTP-method-override
头以提供所需的方法,以便正确路由请求。我已经配置了一个全局
DelegatingHandler
,以验证所有传入请求,并在需要时执行重定向

使用标准路由,一切都很好。当我配置属性时,运行的东西会出轨。似乎AttributeRouting试图在
DelegatingHandler
修改请求之前定位路由,从而导致不正确的路由或IIS 404错误。在AttributeRouting处理程序解析路由之前,是否有方法拦截路由

更多信息:项目托管在IIS上(非自托管)。我使用的AttributeRouting是WebApi 2.0中提供的。
DelegatingHandler
App\u Start
中定义:

GlobalConfiguration.Configuration.MessageHandlers
    .Add(new MyCustomDelegateHandler());
AttributeRouting仅通过以下方式配置:

GlobalConfiguration.Configuration.MapHttpAttributeRoutes();
使用以下属性定义管线:

[HttpGet("api/test/v1/users")]

为了清楚起见,有几个问题……这是自主机还是网络主机(IIS)方案?通过
AttributeRouting
您是指内置的WebAPI2属性路由,而不是TimMcCall的属性路由nuget包…对吗

在Selfhost和Webhost之间进行路由匹配的时间始终存在差异。在Selfhost中,路由匹配发生在消息处理程序运行之后,与Webhost一样,路由匹配发生在消息处理程序运行之前

如果您的场景是Webhost,那么我希望行为不会改变……但是如果您看到不同的行为,那么您能否分享您的路由配置(WebApiConfig.cs&属性化控制器/操作)的外观

在Webhost中,为了在路由匹配发生之前拦截请求,您可以创建一个Owin中间件,它位于Web API接收请求之前。在这个中间件中,您可以根据需要修改请求详细信息

注意

根据上面帖子中的更新“更多信息”,在这似乎是一个问题的地方使用了预RTM位,这不再是最终RTM位的问题。

根据,自托管和IIS托管的请求处理之间没有区别。这两种设置中的委托处理程序都会在路由生效之前运行。我观察到自托管(在工作中)和IIS托管(在家中)的行为都是相同的:在任何路由发生之前,授权处理程序处理请求。你有什么样的项目来重现你所说的吗?海报上没有清楚地说明路线匹配实际上是什么时候发生的。对我所说的一个简单的重述是:创建一个新的Web API项目,然后从WebApiConfig.cs中删除任何现有的配置,然后创建一个简单的委托处理程序,并具有如下内容
config.MessageHandlers.Add(new HandlerA());config.Routes.maphttroute(“DefaultApi”、“api/values”、新的{controller=“values”})…当您请求
api/values
时,您应该会看到处理程序被调用…但是当您发出类似
api/test
的请求时,处理程序永远不会被调用继续我之前的评论,因为在请求为
api/test
且处理程序永远不会被调用的情况下,这表示在运行消息处理程序之前正在进行路由匹配。已同意。查看发布的消息,我原以为在调用delegatinghandler之后会发生路由匹配,但事实似乎并非如此。我在我的原始帖子中添加了一些澄清细节。@Chris和Kiran:MVC和web api路由可以混合使用。VS在新web api项目的配置中添加了一个默认的MVC路由,以满足
帮助区域的需要,该区域是api基于MVC的“帮助页面”。难道这条默认的MVC路线是在拖延时间吗?再一次,海报似乎还暗示当异常发生时OnActionExecuted不会被触发,而我最近发现它实际上是这样的。。。感谢您的更新…看起来您正在使用Web API 2的非RTM部分,这可能是您所说的问题所在。在WebAPI2的RTM部分,您不能再像上面那样定义属性路由…请看这里:看一看。是的,更新lib并从HttpGet更改为Route似乎可以解决这个问题。介意用修正更新你的回复吗?我会接受的?当然,我更新了我的答案。。。