2012-04-11 59 views
28

(從服務器故障後交叉,我意識到以後,我可能應該問的第一個計算器)的ASP.NET Web API僅適用於某些服務器

確定返回404 PUT,我一直在貨架我的大腦和互聯網尋求解決方案。我無法弄清楚。

我寫了一個使用ASP.NET MVC Web API的站點,並且所有的工作都很好,直到我把它放到分段服務器上。該網站在我的本地機器和開發Web服務器上正常工作。開發和登臺服務器都是Win Server 2008 R2。

問題是這樣的:基本上該網站的工作,但有一些API調用使用HTTP PUT方法。這些失敗在分期返回404,但在別處工作正常。

我碰到並修復的第一個問題是請求過濾。但仍然越來越404.

我已經打開IIS中的跟蹤,並得到以下問題。

168. -MODULE_SET_RESPONSE_ERROR_STATUS 
ModuleName IIS Web Core 
Notification 16 
HttpStatus 404 
HttpReason Not Found 
HttpSubStatus 0 
ErrorCode 2147942402 
ConfigExceptionInfo 
Notification MAP_REQUEST_HANDLER 
ErrorCode The system cannot find the file specified. (0x80070002) 

dev和staging上的配置相同,事實上整個站點是直接複製。

爲什麼GET和POST會工作,但不是PUT?

感謝

格雷格

+0

難道我的回答幫助?你試過了嗎? – Aliostad 2012-04-11 14:52:49

+0

是的,它確實有效,謝謝。 – 2012-11-28 10:07:36

回答

25

這些IIS服務器對他們安裝網絡DAV模塊和我打賭它不需要,它被安裝,因爲安裝人員勾選所有複選框。

只需從iis中刪除web-dav即可。

或者使用web.config中刪除Web DAV模塊:

<system.webServer> 
    <modules> 
     <remove name="WebDAVModule" /> 
    </modules> 
    ... 
+1

謝謝,我使用了配置選項並工作。 – 2012-04-11 20:37:17

+1

有時WebDAV是PUT問題的罪魁禍首,但是這個問題特別是WebApi(它使用無延伸的URL處理程序)的事實,我建議人們先嚐試Kevin Ortman的回答。 – 2013-03-19 18:13:18

44

對於那些沒有支持WebDAV,但仍然運行到使用MVC 4的Web API的這個問題誰...

Steve Michelotti記錄了一個爲我工作的解決方案here

在一天結束時,我在web配置中啓用了ExtensionlessUrlHandler-Integrated-4.0處理程序的所有動詞(動詞=「*」)。

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true" /> 
     <handlers> 
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" /> 
     </handlers> 
</system.webServer> 
+0

這爲我解決了http://stackoverflow.com/questions/11257749/attributerouting-why-is-my-post-but-not-my-put-routed(問題原來是這個問題的重複)。 – Halvard 2012-06-29 08:00:29

+0

爲我工作只有部分。請注意,應該避免runAllManagedModulesForAllRequests,在這裏它似乎不需要。 – 2012-08-22 04:29:33

+1

這個 - >是什麼使一切工作。它告訴IIS忽略處理程序中設置的「preConditions」。 – dotnetster 2013-03-13 17:16:09

5

我的託管服務提供商無法卸載WebDAV,因爲這會影響到所有人。

這,runAllManagedModulesForAllRequests =「true」,工作,但不建議。

許多修復包括刪除WebDAVModule模塊,但仍然無法工作。我也刪除了處理程序,最後我可以使用所有動詞POST GET PUT DELETE。

刪除模塊和處理程序中的WebDAVModule和WebDAV。從西風力

<modules> 
    <remove name="WebDAVModule" /> 
</modules> 
<handlers> 
    <remove name="WebDAV" /> 
</handlers> 
+0

這最終解決了我的問題,沒有別的。 – CularBytes 2015-07-14 13:49:05

1

裏克施特拉爾提出以下建議:

 
    < handlers> 
    < remove name="ExtensionlessUrlHandler-Integrated-4.0"/> 
    < add name="ExtensionlessUrlHandler-Integrated-4.0" 
    path="*." 
    verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" 
    type="System.Web.Handlers.TransferRequestHandler" 
    preCondition="integratedMode,runtimeVersionv4.0" 
    /> 
    < /handlers> 
工作已經很適合我。

0

我通過將網站的應用程序池更改爲集成模式來解決此問題,因爲它之前位於經典模式下。

+0

如果您使用OWIN中間件並在IIS上託管,則問題可能是因爲OWIN僅支持集成模式 – Jordan 2015-01-29 15:53:18

4

我解決了這個刪除URLScan ISAPI篩選器

4

在我的情況下,這些解決方案的應用。

我通過將我的應用程序池更改爲Integrated而不是Classic來解決此問題。

的處理程序:

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

不會採用了經典的應用程序池的工作,因爲它preConditionintegratedMode

10

看起來有很多原因會發生這種情況。以上都沒有爲我工作。我已經在web.config中擁有所有必需的HTTP動詞的ExtensionlessUrlHandler設置。最後,我不得不做出IIS中的以下變化:

  • 在IIS中選擇您的網站,然後雙擊Handler Mappings
  • 查找ExtensionlessUrlHandler-ISAPI-4.0_32bit並雙擊
  • 在出現的對話框中,單擊Request Restrictions
  • 在動詞選項卡中添加用逗號分隔缺少的HTTP動詞(在我的情況下,它是PUTDELETE
  • 點擊Ok如有需要並回答Yes彈出Edit Script Map對話框。
  • 重複了ExtensionlessUrlHandler-ISAPI-4.0_64bit

希望這有助於有人:)

+0

非常有幫助!這應該首先檢查。 – brhardwick 2017-04-03 19:52:42

相關問題