SystemWeb主机:IAppBuilder.UseWebApi忽略带扩展名的路径

时间:2014-07-07 21:47:40

标签: iis asp.net-web-api owin

我有一个Owin Startup类,它注册一个WebApi控制器动作并使用IAppBuilder.UseWebApi挂钩它。我的路线模板为/api/packages/{id}/{version},其中version可能包含句点(如1.0.0中所示)。

这适用于自托管,但是当我尝试使用Microsoft.Owin.Host.SystemWeb在IIS中运行我的代码时,有些东西阻止在路径看起来像静态内容请求时调用我的操作。

例如,GET /api/packages/Foo/1.0适用于自托管主机,但会在IIS上生成404。

如果我在GET /api/packages/Foo/1.0/中添加尾部斜杠,则它在自托管和IIS中都有效。

似乎UseWebApi方法中的某些内容阻止Web Api处理看起来像带有扩展名的文件的请求。

其他Owin中间件看到了所有这些请求,所以我知道请求进入了Owin管道,但是关于UseWebApi方法的一些东西似乎忽略了一些请求。

相关:Owin Middleware results in 404 on serverOwin hosted on IIS doesn't capture URLs with Dot "."

1 个答案:

答案 0 :(得分:0)

经过进一步调试后,我在为WebApi接线之前映射了另一个用于SignalR的OWIN中间件,并且顺序似乎在Web-Host上很重要,但在自主机上却没有。更改订单为我解决了这个问题。

更新:使用Owin.Host.SystemWeb时,应在任何希望处理看似静态内容请求的中间件之后调用IAppBuilder.UseStageMarker(PipelineStage.MapHandler)

请参阅https://katanaproject.codeplex.com/wikipage?title=Static%20Files%20on%20IIShttp://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline