2015-03-31 101 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="*."添加標籤