我有一个 Owin Startup 类,它注册了一个 WebApi Controller 操作并使用 IAppBuilder.UseWebApi 将其 Hook 。我的路由模板是 /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 "."
最佳答案
进一步调试后,在 WebApi 中接线之前,我正在为 SignalR 映射另一个 OWIN 中间件,顺序似乎在 Web 主机上很重要,但在 Self-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 .
关于iis - SystemWeb Host : IAppBuilder. UseWebApi 忽略带有扩展名的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24620448/