環境:netcore 5.0 iis 8.5
ajax調用delete接口時發生了以下錯誤
很困惑,檢查了跨域配置如下:
並正常啟用了中間件如下:
前端訪問均正常,且get、post等請求也能正常訪問,就是delete和put報了405 methd not allowed 和跨域錯誤,意識到事情沒有那么簡單.因為之前配置了跨域后還是沒有生效的問題,原因出在iis上,詳情請閱讀關於net core 站點通過iis部署,跨域配置遇到的問題。一番查閱之后,發現和iis確實有關系,罪魁禍首是WebDAVModule,它似乎設置了默認禁用的PUT和DELETE請求方法。為了讓它們正常工作,我們要么需要更改這些默認設置,要么需要為整個Web應用程序禁用它,修改web.config文件如下:
<system.webServer> <modules runAllManagedModulesForAllRequests="false"> <remove name="WebDAVModule" /> </modules> </system.webServer>
禁用之后,問題就解決了!
總結:問題的關鍵其實是設置了進程內托管,選擇進程內托管,意味着將 .NetCore 應用程序的工作進程托管到 IIS 的工作進程 w3wp.exe 中,使用的 IIS 進程內服務器,即使用的是:IISHttpServer.
WebDAVModule模塊默認是開啟的.