VS IISExpress REST DELETE 405 Method Not Allowed .net IIS MVC Rest api 跨域 PUT DELETE 404 沒法使用問題解決方案

【參考】.net IIS MVC Rest api 跨域 PUT DELETE 404 沒法使用問題解決方案html

 

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

 

處理情形


問題情況

 

解決方法

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

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

 

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

<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動詞,以下less

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

 

修改後從新測試已可正常發送 PUT、DELETE 動詞,以下post

 

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

 

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

 

在指令動詞中加入 PUT, DELETE 便可.net

相關文章
相關標籤/搜索