2011-05-27 124 views
75

我使用WebClient類型將* .cab文件上傳到我的服務器。在服務器端,我註冊了一個HTTP處理程序的* .cab文件,如下PUT方法:IIS7.5中「405方法不允許」爲「PUT」方法

<add name="ResultHandler" path="*.cab" verb="PUT" type="FileUploadApplication.ResultHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" /> 

但我始終有一個405法不允許的錯誤,則迴應稱允許的方法如下:

Headers = {Allow: GET, HEAD, OPTIONS, TRACE 
Content-Length: 1293 
Content-Type: text/html 
Date: Fri, 27 May 2011 02:08:18 GMT 
Server: Microsoft-IIS/7.5 
X-Powered-By: ASP.NET} 

即使我明確地允許在我的web應用程序的IIS請求過濾中使用PUT方法,同樣的錯誤仍然存​​在。

目前,我認爲這是一個IIS相關的問題。希望有人能夠點亮我。

謝謝。

回答

32

我啓用了失敗請求跟蹤,並得到了以下信息:

<EventData> 
    <Data Name="ContextId">{00000000-0000-0000-0F00-0080000000FA}</Data> 
    <Data Name="ModuleName">WebDAVModule</Data> 
    <Data Name="Notification">16</Data> 
    <Data Name="HttpStatus">405</Data> 
    <Data Name="HttpReason">Method Not Allowed</Data> 
    <Data Name="HttpSubStatus">0</Data> 
    <Data Name="ErrorCode">0</Data> 
    <Data Name="ConfigExceptionInfo"></Data> 
</EventData> 

所以,我卸載了WebDAVModule從我的IIS,一切都好吧〜

的IIS跟蹤功能是非常有幫助。

+1

感謝您的回答!經過2天的研究,我發現避免「405方法不允許」的唯一工作解決方案是在Application_BeginRequest方法中定義CORS頭文件,正如本答案中提到的http://stackoverflow.com/a/14631068/ 827168。但你的答案比其他所有答案都好,因爲它有助於發現問題,而不是應用一些隨機補丁:) – pomeh 2014-10-15 08:54:55

+0

@pomeh我總是相信完成邏輯。 :) – smwikipedia 2015-09-09 03:12:25

+0

你是如何卸載它的? – Demodave 2015-11-25 19:01:38

17

我在託管MVC4 WebApi項目時遇到了WebDAV的這個問題。我周圍有加入此行到web.config:

<handlers> 
    <remove name="WebDAV" /> 
    <add name="WebDAV" path="*" verb="*" modules="WebDAVModule" 
     resourceType="Unspecified" requireAccess="None" /> 
</handlers> 

如這裏解釋:http://evolutionarydeveloper.blogspot.co.uk/2012/07/method-not-allowed-405-on-iis7-website.html

+0

真正需要WebDAV的人的最佳解決方案。是否有人需要WebDAV是一個單獨的討論。 – MrBoJangles 2018-02-26 18:23:32

130

通常這個錯誤是由WebDAV模塊,嘗試處理這種請求引起的。一個簡單的解決方案是將其從模塊和system.webServer部分的處理程序中移除,位於web.config文件中。 這裏的配置示例:

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

使用以下MS文章,我將刪除標籤添加到處理程序,但它仍然無法工作。感謝您的回答,我看到我還需要將其添加到模塊部分。非常感激。這裏是文章:http://www.asp.net/web-api/overview/testing-and-debugging/troubleshooting-http-405-errors-after-publishing-web-api-applications – 2015-03-17 14:28:02

+4

它適合我! – yanborowski 2015-07-17 17:14:42

+0

這個爲我工作〜!!!感謝〜! – Franva 2016-10-07 05:03:04

12

卸下了WebDAV的模塊就足夠了。只需更改您的Web.config:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"> 
     <remove name="WebDAVModule" /> 
4

無論出於何種原因,在我的web.config中將WebDAVModule標記爲「remove」並不足以解決我的問題。

我發現了另一種方法,做了解決了這個問題。如果你在同一條船上,試試這個:

  1. 在IIS管理器中,選擇需要支持PUT的應用程序。
  2. 在功能視圖中,找到WebDAV創作規則。雙擊它,或從上下文菜單中選擇打開功能(右鍵單擊)。
  3. 在操作窗格中,找到並單擊WebDAV設置...
  4. 在WebDAV設置中,找到請求篩選行爲,並在其下找到允許動詞篩選。設置允許動詞篩選
  5. 在「操作」窗格中,單擊「」應用

這可以防止WebDAV拒絕它不支持的動詞,從而允許PUT通過您的RESTful處理程序不受干擾地流動。

2

對我來說,這個錯誤不會消失,並允許PUT方法,無論我做什麼......卸載webdav,把配置放在web.config中,以從處理程序和模塊中移除webdav,並將PUT設置爲允許的動詞請求過濾器iis ..並確保iis處理器映射處理請求配置PUT。

我的問題最終是由於ASP.NET 4.5 Extensions安裝不當造成的。從服務器角色和功能中刪除了與asp.net相關的所有內容。重新啓動。閱讀角色並重新啓動。一切工作與上面的配置。

---下面將使PUT被接受,但會將其發送給錯誤的處理程序。 --ignore下面的

最後,在iis上的TRACE處理程序映射中添加PUT動詞作爲允許的動詞。因爲我啓用了失敗的錯誤跟蹤,並且此動詞不允許動詞。

上次我在另一臺服務器的IIS上遇到了同樣的問題,這是由於URL末尾缺少'/',因爲它使用的是默認處理程序而不使用默認文檔,現在我意識到了這一點。 。如果沒有其他幫助,請檢查IIS處理程序映射。

11

我嘗試了大部分的答案,不幸的是,他們都沒有完成。

這是什麼爲我工作。有3件事情要做,你想PUT的網站(選擇網站):

  1. 打開WebDav Authoring Rules,然後選擇出現在右欄上Disable WebDAV選項。

  2. 選擇Modules,找到WebDAV Module並將其刪除。

  3. 選擇HandlerMapping,找到WebDAVHandler並將其刪除。

重新啓動IIS。

+0

This Works!不知道是否可以通過編輯web.config文件來完成所有3個步驟,但只需使用IIS管理控制檯即可輕鬆完成。請注意,有3個以WebDAV開頭的HandlerMapping條目* - 我全部刪除了3條,生活很好。 – SlimsGhost 2015-06-03 02:26:02

+1

我試着卸載WebDav並沒有工作。然後,我按照上面的三個步驟操作,「PUT」開始工作。 – agarwaen 2015-11-05 04:37:56

0

如果IIS應用程序池下的經典模式下運行,確保你已經在你的web.config

<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 

    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" /> 
11

here採取以下和它的工作對我來說:

1.Go到IIS經理。

2.單擊您的應用程序。

3.轉到「處理程序映射」。

4.在功能列表中,雙擊「WebDAV」。

5.單擊「請求限制」。

6.在標籤「動詞」中選擇「所有動詞」。

7.按「確定」。

+1

這對我有幫助,但我會用我的經驗來澄清。 2.(Web服務)應用程序。 3.雙擊中央面板中的Handler Mappings圖標。 – Gary 2017-02-24 00:20:21

2

我有這個問題,但沒有任何與WebDAV相關的問題。就我而言,客戶正在向www.myServer.com/api/chart發送POST消息。這個調用應該由「ExtensionlessUrlHanlder-Integrated-4.0」來處理,然而,不知何故,我的服務器目錄「... \ Server \ api \ chart \」中創建了一個本地文件結構。這意味着正在調用「StaticFile」處理程序。刪除這些本地文件終於解決了這個問題。

0

就我而言,我已將Web Deploy重新部署到另一個端口,這也是IIS端口(不是80)。我一開始並沒有意識到,但即使在同一端口下同時運行也沒有錯誤,但似乎Web Deploy最有可能首先響應而不是IIS出於某種原因導致此錯誤。我只是將我的IIS綁定移動到另一個端口,一切都很好。 ;)

5

最好只刪除未使用的WebDAV功能。轉到程序和功能 =>啓用Windows功能打開或關閉

Internet信息禁用WebDAV發佈服務 =>萬維網服務 =>常見HTTP功能

enter image description here

+0

謝謝!這完全解決了我的問題! – wmehanna 2017-05-31 17:47:01