1、在使用Asp.net WebAPI 或Asp.Net Core WebAPI 時 ,若是使用了Delete請求謂詞,本地生產環境正常,線上發佈環境報錯。html
服務器返回405,請求謂詞無效。web
2、問題分析診斷api
首先檢查跨域配置是沒有問題的,查詢數據和新增數據的請求也是沒有問題的,只出如今修改和刪除數據。經過了解ABP Web API請求頭設置,查詢是GET請求,新增是POST請求,而修改是PUT請求,刪除是DELETE請求,IIS服務一般都是支持get和post請求的,由此分析推斷頗有多是IIS不支持put和delete謂詞請求。跨域
經過百度了一遍對IIS進行新添加謂詞put和delete。 點擊部署應用 -> 出來程序映射 –> aspNetCore(因爲我部署是.Net Core 程序,因此選擇AspNetCoreModule模塊)瀏覽器
雙擊打開緩存
經過檢查,aspNetCore自己是支持所有謂詞的,如今確定是和這個謂詞有關,但須要更詳細的錯誤信息。服務器
既然不錯信息是跨域,咱們先排除跨域因數的影響,如今看到的跨域錯誤信息頗有多是個假象,咱們經過swagger對web API進行調試。app
調試須要配置受權token,請參考博客:http://www.cnblogs.com/donaldtdz/p/7892865.htmlpost
先測試接口:/api/services/app/User/GetAll測試
測試結果:經過 200
再測試接口:/api/services/app/User/Delete
測試結果:
HTTP 錯誤 405.0 - Method Not Allowed
沒法顯示您正在查找的頁面,由於使用了無效方法(HTTP 謂詞)。
將response body 用保存用瀏覽器打開以下:
查看詳細錯誤信息,咱們開始的推斷是沒有問題的,最後也嘗試了不少方法,最終問題核心在於 模塊WebDAVModule
3、解決方案1 (這種方式針對當前服務器全部網站,不推薦,由於可能替他網站會使用到WebDAV)
在啓用或關閉Windows功能 –> Internet Information Services 關閉WebDAV發佈
4、解決方案2 (針對當前網站,去除WebDav 模塊)
修改,當前Asp.Net Core 發佈後的WebConfig
去除WebDAVModule,
<modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule" /> </modules>
<configuration> <system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule" /> </modules> <handlers accessPolicy="Read, Script"> <remove name="WebDAV" /> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\QL.MiniData.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" /> </system.webServer> </configuration>
這樣就能夠了。
更多參考:
http://www.javashuo.com/article/p-xnnsnqjs-mq.html
https://blog.csdn.net/qiujuer/article/details/23827531