Asp.Net Core IIS發佈後PUT、DELETE請求錯誤405.0 - Method Not Allowed 因爲使用了無效方法(HTTP 謂詞)

一、在使用Asp.net WebAPI 或Asp.Net Core WebAPI 時 ,如果使用了Delete請求謂詞,本地生產環境正常,線上發佈環境報錯。

服務器返回405,請求謂詞無效。

二、問題分析診斷

首先檢查跨域配置是沒有問題的,查詢數據和新增數據的請求也是沒有問題的,只出現在修改和刪除數據。通過了解ABP Web API請求頭設置,查詢是GET請求,新增是POST請求,而修改是PUT請求,刪除是DELETE請求,IIS服務通常都是支持get和post請求的,由此分析推斷很有可能是IIS不支持put和delete謂詞請求。

通過百度了一遍對IIS進行新添加謂詞put和delete。 點擊部署應用 -> 出來程序映射 –> aspNetCore(由於我部署是.Net Core 程序,所以選擇AspNetCoreModule模塊)

在這裏插入圖片描述

在這裏插入圖片描述
雙擊打開

在這裏插入圖片描述

在這裏插入圖片描述

通過檢查,aspNetCore本身是支持全部謂詞的,現在肯定是和這個謂詞有關,但需要更詳細的錯誤信息。

既然不錯信息是跨域,我們先排除跨域因數的影響,現在看到的跨域錯誤信息很有可能是個假象,我們通過swagger對web API進行調試。

調試需要配置授權token,請參考博客:http://www.cnblogs.com/donaldtdz/p/7892865.html

先測試接口:/api/services/app/User/GetAll

在這裏插入圖片描述

測試結果:通過 200

在這裏插入圖片描述
再測試接口:/api/services/app/User/Delete

在這裏插入圖片描述

測試結果:

HTTP 錯誤 405.0 - Method Not Allowed

無法顯示您正在查找的頁面,因爲使用了無效方法(HTTP 謂詞)。

在這裏插入圖片描述

將response body 用保存用瀏覽器打開如下:
在這裏插入圖片描述

查看詳細錯誤信息,我們開始的推斷是沒有問題的,最後也嘗試了很多方法,最終問題核心在於 模塊WebDAVModule

三、解決方案1 (這種方式針對當前服務器所有網站,不推薦,因爲可能替他網站會使用到WebDAV)

在啓用或關閉Windows功能 –> Internet Information Services 關閉WebDAV發佈
在這裏插入圖片描述

四、解決方案2 (針對當前網站,去除WebDav 模塊)

修改,當前Asp.Net Core 發佈後的WebConfig

去除WebDAVModule,

複製代碼
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章