IIS中承载的Web Api批处理请求为内部URL返回404

IIS中承载的Web Api批处理请求为内部URL返回404,iis,asp.net-web-api,asp.net-web-api2,Iis,Asp.net Web Api,Asp.net Web Api2,我一直在使用WebAPI2开发一个RESTfulAPI,作为其中一部分,我使用JSON对象实现了批处理请求,如他们的一篇wiki文章()中所述 在使用IIS Express进行测试时,此过程非常顺利,但当我在IIS应用程序下的IIS 8中部署应用程序时,批处理请求不再正常工作。每个子请求返回404 not found,即使url指向正确的位置。但是,只有当程序作为应用程序部署在IIS网站下时,才会发生这种情况。如果您只是将程序放入IIS网站的根目录中,批处理的行为就正确了 我在Fiddler中有

我一直在使用WebAPI2开发一个RESTfulAPI,作为其中一部分,我使用JSON对象实现了批处理请求,如他们的一篇wiki文章()中所述

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


我在Fiddler中有一些失败/成功反应的图片,但我不想发布它们。因此,例如,对托管在“http://domain.com/api/v1.0/”的IIS网站发出的批处理POST请求,内部url设置为“realtimedata/queues?queueIds=1”可以正常工作,但当应用程序可在“http://domain.com/test/api/v1.0/”访问时,具有相同内部url的相同请求返回404,即使“http://domain.com/test/api/v1.0/realtimedata/queues?queueIds=1”是一个完全有效的地址,可以在不使用批处理请求的情况下调用它(示例URL中的“http”和“domain”之间的空间只是为了绕过SO的链接限制,所以想象它们不存在)。有人知道发生了什么吗?

根据以下示例在web.config中添加/修改system.webServer部分:

<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=“*”
中的add标记。

经过更多测试后,我发现这是IIS中通过OWIN托管的一个特殊问题。我必须根据GlobalConfiguration.Configuration对象而不是新的配置对象注册路由,然后404被解析。我不确定为什么会出现这种情况,但它起了作用。

Hmmm,我在没有OWIN的情况下遇到了同样的问题,我使用了
GlobalConfiguration.Configuration
。在任何情况下,解决方案,我为我工作。