Web Api 托管在 IIS 中的批处理请求 Returns 内部 URL 的 404

Web Api Batch Request Hosted in IIS Returns 404 for Inner URLs

我一直在使用 Web Api 2 开发 RESTful API,作为其中的一部分,我使用 JSON 对象实现了批处理请求,如其中一个所述他们的维基文章 (https://aspnetwebstack.codeplex.com/wikipage?title=Web+API+Request+Batching).

这个过程在使用 IIS Express 进行测试时非常顺利,但是当我在 IIS 应用程序下的 IIS 8 中部署应用程序时,批处理请求不再正常运行。即使 url 指向正确的位置,也找不到每个子请求 returns 404。但是,只有当程序作为应用程序部署在 IIS 网站下时才会发生这种情况。如果您只是将程序放入 IIS 网站的根目录,则批处理行为正确。

我在 Fiddler 中有一些失败/成功响应的图片,但我 post 不让我看。例如,向托管在 "http:// domain.com/api/v1.0/" 的 IIS 网站发出的批处理 POST 请求,内部 url 设置为 "realtimedata/queues?queueIds=1" 工作正常,但是当可以访问该应用程序时"http:// domain.com/test/api/v1.0/" 具有相同内部 url returns 404 的相同请求,即使 "http:// domain.com/test/api/v1.0/realtimedata/queues?queueIds=1" 是一个完全有效的地址,可以在不使用批处理请求的情况下正常调用。 ("http" 和示例 url 中的域之间的 space 只是为了绕过 SO 的 link 限制,所以假设它们不存在)。有没有人知道是怎么回事吗?

Add/modify system.webServer 根据此示例,您的 web.config 部分:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <remove name="OPTIONSVerbHandler" />
        <remove name="TRACEVerbHandler" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>

请注意,path="/*" 添加 标签中替换为 path="*."

经过更多测试,我发现这是在 IIS 中通过 OWIN 托管时特有的问题。我必须针对 GlobalConfiguration.Configuration 对象而不是新的配置对象注册我的路由,然后 404 问题得到解决。我不确定为什么会这样,但确实有效。