面向服務開發越來越普及的今天,使用WebService、WCF、WebAPI和ServiceStack一類SOA開發的項目越來月火,使用SOA面向服務開發時候通常要啓用HTTP的GET POST之外的其他謂詞,比如PUT、DELETE,而默認情況下IIS7是不開啓其他謂詞的,這樣做好的服務就被屏蔽掉,不能被外部訪問了(開發時候沒有使用IIS,所以不存在這個問題)。
於是乎找了不少網上資料,包括了外文的,解決方式基本就是兩種方式,這裏轉載一下找到的資料:
來自一箇中文博客的,作者dwtedx
-------轉載開始 {---------------------------------------------
問題描述:
使用WCF 4.0 開發REST服務、部署到windows 7 64位 IIS 7.5 (應用程序池選擇的是ASP.NET V4.0) 上
GET、POST方式都能成功、但是PUT,DELETE報錯
HTTP 錯誤 405.0 - Method Not Allowed 無法顯示您正在查找的頁面
因爲使用了無效方法(HTTP 謂詞)
但是如果使用VS2010 調試模式、GET、POST、PUT、DELETE都成功
這說明代碼本身沒有任何問題、 問題出在IIS 7.5 設置上
解決方案:
一、如果是處理程序裏沒有相關後綴
1.處理程序映射
2.添加腳本映射
3.請求路徑:*.html
4.可執行文件:C:/windows/system32/inetsrv/asp.dll
5.請求限制-謂詞:輸入需要允許請求的謂詞(POST,GET,PUT)
6.輸入名字後保存
7.重啓站點
二、如果處理程序有相關後綴
1.處理程序映射
2.找到腳本映射
3.如:請求路徑:*.ashx
4.請求限制-謂詞:輸入需要允許請求的謂詞(POST,GET,PUT)
5.輸入名字後保存、如:DELETE
6.重啓站點
更多方案:
我在網上找到了另外的解決方案、我沒有測試過
<system.webServer> <modules> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="WebDAV" /> </handlers> </system.webServer>
頁面標題:IIS7 HTTP 405 Method Not Allowed_PUT and DELETE me_dwtedx博客
來源網址: http://dwtedx.sinaapp.com/itshare_112.html
-----------轉載結束 }---------------------------------------------------------
另一篇博文中說明的更明晰,
-------轉載開始 {---------------------------------------------
來源網址:http://www.cnblogs.com/shanyou/archive/2012/03/23/2414252.html
作者:張善友
WebDAV 是超文本傳輸協議 (HTTP) 的一組擴展,爲 Internet 上計算機之間的編輯和文件管理提供了標準.利用這個協議用戶可以通過Web進行遠程的基本文件操作,如拷貝、移動、刪除等。在IIS 7.0中,WebDAV是作爲獨立擴展模塊,需要單獨進行下載,而IIS 7.5中將集成WebDAV,然而WebDav把Put,Delete給咔嚓了。所以在IIS 7.5上部署的RESTful服務(WCF Data Service,WCF Rest Service,ASP.NET Web API,ASP.NET MVC)就悲劇了,當發送Put請求就會發生HTTP Error 405.0 – Method Not Allowed錯誤,解決方法也很簡單,在Web.config裏面加入如下設置:
[配置的內容同上]
-----------轉載結束 }---------------------------------------------------------
在我們遇到的問題,是使用的修改web.config的解決方式。
這個是在IIS.net論壇上的交流(E文好的朋友可以看看),http://forums.iis.net/t/1196237.aspx
交流的跨站訪問 Cross-site HTTP requests 時候的一些問題
另一篇關於CORS的(E文的探討)http://brockallen.com/2012/10/18/cors-iis-and-webdav/