iis - SystemWeb Host : IAppBuilder. UseWebApi 忽略带有扩展名的路径

标签 iis asp.net-web-api owin

我有一个 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%20IIShttp://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/

相关文章:

azure - 无法通过公共(public) IP 访问 IIS Web 服务器

asp.net - IIS 负载平衡和 ASP.Net

c# - IIS/WCF 客户端证书到用户的一对一映射 & 内部服务器错误

.net - System.Runtime.InteropServices.COMException (0x800A03EC)

asp.net-mvc - 没有给出对应于 'key' 的必需形式参数 'IOwinContext.Get<T>(string)' 的参数

asp.net-mvc - 从 MVC Controller 调用 Web API 来构建和传递模型以查看

c# - 动态构建 webapi odata 模型

amazon-web-services - Windows docker上的AWS CLI

c# - 具有 OWIN 集成的 Autofac 调用了错误的构造函数

c# - 在给定用户已经有 cookie 的情况下启动应用程序时处理 null HttpContext.Current