2015-03-31 72 views
2

我一直在使用网络API 2,开发一个RESTful API作为它的一部分,我实现使用JSON对象在他们的维基文章中描述批量请求(https://aspnetwebstack.codeplex.com/wikipage?title=Web+API+Request+Batching) 。网络API批处理请求返回404内的网址

这个过程很顺利足够,同时使用IIS快速测试,但是当我部署的应用程序在IIS 8中的IIS应用程序下一批请求不再正常。即使URL指向正确的位置,每个子请求都会返回404,但不会返回。但是,只有当该程序作为IIS网站下的应用程序部署时才会发生这种情况。如果您只是将程序放入IIS网站的根目录下,则批处理行为正确。

我有失败/成功响应的一些图像中提琴手,但SO不会让我张贴。因此,作为一个例子,在“HTTP:// domain.com/api/v1.0/”主办的IIS网站制作了一批POST请求与内部URL设置为“?realtimedata /队列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的链接限制,所以想象它们不存在)。有没有人知道发生了什么?

回答

1

更多的测试后,我发现这是一个问题。特别是通过IIS中的OWIN托管不得不根据GlobalConfiguration.Configuration对象注册我的路由,而不是新建立的配置对象,然后404解决了。我不确定为什么会出现这种情况,但它很有效。

+0

嗯,我没有OWIN相同的问题,我用'GlobalConfiguration.Configuration'来。无论如何,我给出的解决方案(http://stackoverflow.com/questions/29376233/web-api-batch-request-hosted-in-iis-returns-404-for-inner-urls/30101356# 30101356)适合我。 – 2015-05-12 16:36:38

0

添加/修改系统.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="*."添加标签