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

时间:2015-03-31 18:50:20

标签: iis asp.net-web-api asp.net-web-api2

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

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

我在Fiddler中有一些失败/成功回应的图片,但是我不会让我发布它们。例如,一个批量POST请求发送到IIS网站托管在" http:// domain.com/api/v1.0/"将内部网址设置为" realtimedata / queues?queueIds = 1"工作正常,但是当应用程序可以在" http:// domain.com/test/api/v1.0/"具有相同内部URL的相同请求返回404,即使" http:// domain.com/test/api/v1.0/realtimedata/queues?queueIds=1"是一个完全有效的地址,可以在不使用批处理请求的情况下被称为罚款。 (示例网址中的" http"和"域之间的空间只是为了绕过SO的链接限制,所以想象它们不在那里)。有谁知道发生了什么?

2 个答案:

答案 0 :(得分:1)

经过更多测试后,我发现这是通过IIS中的OWIN进行托管的一个特殊问题。我不得不针对GlobalConfiguration.Configuration对象注册我的路由而不是新的配置对象,然后解析了404。我不确定为什么会这样,但它确实有效。

答案 1 :(得分:0)

根据此示例在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="*."