『壹』 enablecors-webapi跨域 為何不能實現有哪些注意事項
上一篇我們介紹了如何使用vue resource處理請求,結合服務端的REST API,就能夠很容易地構建一個增刪查改應用。 這個應用始終遺留了一個問題,Web App在訪問REST API時,沒有經過任何認證,這使得服務端的REST API是不安全的,只要有人知道api地址,就可以調用API對服務端的資源進行修改和刪除。 今天我們就來探討一下如何結合Web API來限制資源的訪問。 本文的主要內容如下: 介紹傳統的Web應用和基於REST服務的Web應用 介紹OAuth認證流程和密碼模式 創建一個基於ASP. Identity的Web API應用程序 基於$.ajax實現OAuth的注冊、登錄、注銷和API調用 基於vue-resource實現OAuth的注冊、登錄、注銷和API調用 本文的最終示例是結合上一篇的CURD,本文的登錄、注冊、注銷和API調用功能實現的。 35 本文9個示例的源碼已放到GitHub,如果您覺得本篇內容不錯,請點個贊,或在GitHub上加個星星! Page Demo GitHub Source 基於$.ajax的示例如下: 注冊示例 登錄和注銷示例 登錄獲取token並調用API示例 注冊、登錄、注銷、調用API綜合示例 基於vue-resource的示例如下: 注冊示例 登錄和注銷示例 登錄獲取token並調用API示例 注冊、登錄...
『貳』 如何讓WEBAPI 能夠進行跨越訪問
Cors是個比較熱的技術,這在蔣金楠的博客里也有體現,Cors簡單來說就是「跨域資源訪問」的意思,這種訪問我們指的是Ajax實現的非同步訪問,形象點說就是,一個A網站公開一些介面方法,對於B網站和C網站可以通過發Xmlhttprequest請求來調用A網站的方法,對於xmlhttprequest封裝比較好的插件如jquery的$.ajax,它可以讓開發者很容易的編寫AJAX非同步請求,無論是Get,Post,Put,Delete請求都可以發送。
Cors並不是什麼新的技術,它只是對HTTP請求頭進行了一個加工,還有我們的Cors架構里,對jsonp也有封裝,讓開發者在使用jsonp訪問里,編寫的代碼量更少,更直觀,呵呵。(Jsonp和Json沒什麼關系,它是從一個URI返回一個Script響應塊,所以,JSONP本身是和域名沒關系的,而傳統上的JSON是走xmlhttprequest的,它在默認情況下,是不能跨域訪問的)
『叄』 WebApi內置跨域功能,為什麼我就實現不了
在Web.config的system.webServer配置節下增加配置
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Headers" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
</customHeaders>
</httpProtocol>
如果通過jquery 跨域訪問,在伺服器端和客戶端需要分別配合:
1. 在伺服器端,需要為每一個請求進行授權。例如在消息頭中要有
Access-Control-Allow-Origin:*
2. 在客戶端要寫
jQuery.support.cors = true;
『肆』 js調用跨域get請求調用webApi 多出個options請求是為什麼
我嘗試用我的語言描述一下吧:
先說跨域請求的原理,瀏覽器的安全機制是不允許出現跨域請求的,否則會有很嚴重的安全問題,解決跨域問題有幾種不同的方法,你題目中提到的方法就是通過在Response header中添加Access-Control-Allow-Origin 來讓瀏覽器知道伺服器所在的域,對用於訪問的域進行了授權。
但是因為這個Header要伺服器提供,所以無論如何,請求是要先發出去才能指導是不是允許跨域請求,所以在報跨域錯誤的時候,雖然報錯了,但是請求實際上依然發送到伺服器了,只是瀏覽器看了一眼伺服器的返回,然後發覺不行,這個請求返回的header里沒有授權,所以瀏覽器不能用。
這樣就帶來一個問題,請求會對伺服器造成影響,試想一下,要使用XHR跨域提交一個表單,無論返回頭裡面是否添加了跨域的header,都會提交一個請求到伺服器,伺服器要進行相應的操作。這種情況其實在一定條件下也是可以接受的,但是如果有更大的安全隱患,就不可以了,所以就需要OPTIONS請求了。
OPTIONS請求就是在符合一定條件下的跨域請求發送之前,瀏覽器會先發一個OPTIONS請求,問一下伺服器,是不是能跨域,如果能,就發真正的請求,如果不能,就不發了。這個的作用就很好理解了。
如上面所說,不是所有的跨域請求都要先發OPTIONS請求的,規范裡面規定,以下情況不需要先發一個 OPTIONS請求:
請求類型必須是GET、HEAD、POST中的一種。
請求的Header裡面只能包涵一些規范重點Header,以及規范的值,包括:Accept、Accept-Language、Content-Language、Content-Type、DPR、Downlink、Save、Data、Viewport-Width、Width
Content-Type的類型必須是以下幾種:application/x-www-form-urlencoded、multipart/form-data、text/plain
所以,如果你不希望瀏覽器多餘的發一個OPTIONS請求,只要遵循這個規范就可以了。
但是有時候因為需求原因,也難避免要自定義一些Header。比如,很多JS的AJAX庫,都會自定義一個Header,讓伺服器可以識別出這是否是一個非同步請求,這樣OPTIONS請求就一定要被先發送了。
順便說,伺服器端也要判斷OPTIONS類型的請求,進行一系列操作,不要讓OPTIONS請求影響到數據。
更多內容,可以看相關資料和文檔:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
https://developer.mozilla.org/en-US/docs/Web/HTTP/Server-Side_Access_Control
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
『伍』 昨天有老同學問我怎麼在Windows Server2012 R2裡面部署 MVC 的網
一直以來都是在win8或windows server2012中進行asp.net mvc或webapi程序的部署,沒有發現任何問題。今天在win2008中進行asp.net webapi的部署,訪問api的時候頁面顯示404錯誤。下面步驟將解決asp.net webapi在win2008中的部署問題。
添加映射
在iis中選中需要設置的webapi站點,雙擊「處理程序映射」
在彈出框中添加對webapi的請求映射:
請求路徑:api /*
可執行文件:%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll,注意32位和64位路徑的區別。
名稱:webapi,自定義名稱即可
修改應用程序池的管道模式
將webapi的應用程序池的管道模式修改為經典
更新dll
映射添加之後,訪問站點,不會報404錯誤了,但會報一些dll文件未能載入,一共有4個,名稱分別如下:
System.Web.WebPages.Deployment.dll
Microsoft.Web.Infrastructure.dll
System.Web.WebPages.Razor.dll
System.Web.WebPages.dll
將上面四個dll文件復制到webapi站點到bin目錄中,問題解決。
『陸』 js調用跨域get請求調用asp.net webApi 多出個options請求是為什麼
出於安全的考慮,JS是不允許跨域訪問的。
但是如果你非要用JS實現,你可以寫一個hander,然後JS調用這個hander。
『柒』 如何在Windows Server2008R2中部署WebAPI
一、安裝說明:
1、安裝基本信息
電腦軟體
在WindowsServer2008(或WindowsServer2008R2)中,單擊「開始」-「程序」-「管理工具」-「伺服器管理」,或在「運行」中輸入命令:servermanager.msc命令打「伺服器管理」程序。
在「角色」選項中,單擊「添加角色」:
選擇伺服器角色:Web伺服器(IIS)
單擊選中「web伺服器(IIS))前面的單選框。
在彈出的對話框中,單擊「添加必需的功能」:
「添加角色向導」對web伺服器進行簡單介紹,之後單擊「下一步」:
選擇角色需要的相關服務之後單擊「下一步」:
確認安裝選擇,之後單擊「下一步」:
系統開始安裝所選的角色服務,可能需要幾十秒可幾鍾時間:
安裝完成,點擊關閉即可:
名稱:IIS7.0安裝
大小:10MB|版本:7.0|類別:系統工具|語言:中文
應用平台:windows server 2008
2、安裝介紹
windows server 2008系統中的iis安裝,與windows server 2003中的安裝明顯不再相同了,windows server 2008安裝iis,不再需要其他相關組件,不像windows server 2003需要有i386文件,下面來詳細介紹一下,windows server 2008安裝iis的步驟:
二、安裝步驟:
開始--伺服器管理--角色--添加角色
點擊添加必需的功能
勾選在「Web伺服器(IIS)」
點擊下一步
下面是選擇「角色服務」的,針對你需要的進行相應的選擇
然後點擊「下一步」開始確認安裝
然後等待安裝成功
『捌』 js調用webapi、 webservice等介面時,怎樣解決調用時的json跨域問題
void還可以被用在函數參數位置,表示我們明確希望這個函數在被調用時不需要任何參數。例如上面的函數printmessage也可以寫為以下形式:
void printmessage (void)
{
cout << "I'm a function!";
}