我有一个.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")]
答案 0 :(得分:1)
为了清楚起见,有几个问题......这是Selfhost还是Webhost(IIS)场景? AttributeRouting
你的意思是内置的Web API 2属性路由而不是TimMcCall的属性路由nuget包...对吗?
Selfhost和Webhost之间发生路由匹配时始终存在差异。在Selfhost中,路径匹配在消息处理程序运行后发生,其中Webhost路由匹配在运行消息处理程序之前发生。
如果您的方案是Webhost,那么我希望行为不会改变......但是如果您看到不同的行为,那么您可以分享您的路由配置(WebApiConfig.cs和属性控制器/操作)的外观样的?
在Webhost中,为了在路由匹配发生之前拦截请求,您可以创建一个Owin中间件,它位于Web API接收请求之前。在此中间件中,您可以根据需要修改请求详细信息。
注意强>:
基于上面帖子中的更新“更多信息”,正在使用RTM之前的位,这似乎是一个问题,这不再是最终RTM位的问题。