[ASP.NET] 解決泛型處理常式 (Handler.ashx) 於 IIS Express 使用 HTTP PUT、DELETE 動詞 405 Method Not Allowed 錯誤

紀錄使用 IIS Express 執行網站測試時,解決泛型處理常式 (Handler.ashx) 於 IIS Express 使用 HTTP PUT、DELETE 動詞 405 Method Not Allowed 錯誤

前言


今日在使用泛型處理常式處理檔案上傳時,使用了 HTTP 動詞的 PUT、DELETE 進行操作,卻發現當使用了 PUT、DELETE 時會發生「405 Method Not Allowed」錯誤,此錯誤的發生是由於使用了不正確的 HTTP 動詞而產生,也就是 Server 並不接受此 HTTP 動詞,為了讓 Server 能夠接受 PUT、DELETE 動詞,需要去調整 IIS 的處理常式對應,以下紀錄發生此問題的解決方法。

 

處理情形


問題情況

 

解決方法

當此問題發生時找到了 IIS Express FAQ,在 FAQ 裡提到需要去修改 IIS Express 的 config 檔案,路徑如下

C:\Users\User\Documents\IISExpress\config\applicationhost.config

 

在 config 檔案的 <handlers> ... </handlers> 標籤內的 ExtensionlessUrl-Integrated-4.0 屬性中的 verb="GET,HEAD,POST,DEBUG" 字段加入 PUT, DELETE 動詞,如下


<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />

 

但依照 FAQ 的方法去增加動詞後進行測試,卻還是一樣出現 405 Method Not Allowed 錯誤。於是再仔細觀察 handlers 內後發現由於接收 HTTP PUT、DELETE 動詞的檔案為泛型處理常式,泛型處理常式的處理會交由 SimpleHandlerFactory 進行處理,所以在 handlers 內尋找 SimpleHandlerFactory 可以看到 SimpleHandlerFactory-Integrated 屬性配置,修改 SimpleHandlerFactory-Integrated 的 verb 加上 PUT、DELETE動詞,如下 


<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />

 

修改後重新測試已可正常發送 PUT、DELETE 動詞,如下

 

另外如果要透過 IIS 去調整的話可以使用以下方法,進入 IIS 管理介面後點選處理常式對應

 

找到 SimpleHandlerFactory-Integrated-4.0 右鍵編輯,選擇要求限制

 

在指令動詞中加入 PUT, DELETE 即可

 

參考資料


IIS Express FAQ

當使用者造訪網站裝載在執行網際網路資訊服務 7.0 的伺服器上的錯誤訊息: 「 HTTP 錯誤 405.0 的方法不允許 」

 

 


以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)