我有一个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 server,Owin hosted on IIS doesn't capture URLs with Dot "."
答案 0 :(得分:0)
经过进一步调试后,我在为WebApi接线之前映射了另一个用于SignalR的OWIN中间件,并且顺序似乎在Web-Host上很重要,但在自主机上却没有。更改订单为我解决了这个问题。
更新:使用Owin.Host.SystemWeb时,应在任何希望处理看似静态内容请求的中间件之后调用IAppBuilder.UseStageMarker(PipelineStage.MapHandler)
。
请参阅https://katanaproject.codeplex.com/wikipage?title=Static%20Files%20on%20IIS和http://www.asp.net/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline。