属性路由更改WebAPI管道

时间:2013-11-14 02:40:41

标签: asp.net-web-api routes asp.net-web-api-routing attributerouting

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

使用标准路由,一切都很好。当我配置AttributeRouting时,事情就会失败。似乎AttributeRouting尝试在DelegatingHandler修改请求之前找到路由,从而导致路由不正确或IIS 404错误。有没有办法在AttributeRouting处理程序解析路由之前拦截路由?

更多信息:项目托管在IIS上(非自托管)。我正在使用的AttributeRouting是WebApi 2.0中的内容。 DelegatingHandler因此在App_Start中定义:

GlobalConfiguration.Configuration.MessageHandlers
    .Add(new MyCustomDelegateHandler());

使用以下命令配置AttributeRouting:

GlobalConfiguration.Configuration.MapHttpAttributeRoutes();

使用以下属性定义路线:

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

1 个答案:

答案 0 :(得分:1)

为了清楚起见,有几个问题......这是Selfhost还是Webhost(IIS)场景? AttributeRouting你的意思是内置的Web API 2属性路由而不是TimMcCall的属性路由nuget包...对吗?

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

如果您的方案是Webhost,那么我希望行为不会改变......但是如果您看到不同的行为,那么您可以分享您的路由配置(WebApiConfig.cs和属性控制器/操作)的外观样的?

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

注意
基于上面帖子中的更新“更多信息”,正在使用RTM之前的位,这似乎是一个问题,这不再是最终RTM位的问题。