我一直在使用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的链接限制,所以想象它们不在那里)。有谁知道发生了什么?
答案 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="*."
。