Web API中使用CORS解決跨域

2022-01-15 04:04:44 字數 2742 閱讀 1893

如果兩個頁面的協議,埠和網域名稱都相同,則兩個頁面具有相同的源,注:ie不考慮埠,同源策略不會阻止瀏覽器傳送請求,但是它會阻止應用程式看到響應。如下圖所示

cors是乙個w3c標準,全稱是"跨域資源共享"(cross-origin resource sharing)它允許瀏覽器向跨源伺服器,發出請求。cors需要瀏覽器和伺服器同時支援,目前,主流的瀏覽器都支援cors,因此實現cors通訊的關鍵是伺服器。cors是通過目標伺服器返回的header設定來控制是否可跨域。其中重要的乙個引數即 access-control-allow-origin(訪問控制允許**),通過這個引數指定可以接收的請求資源。在.net web api中實現的方式有以下幾種:

我們在action中可以直接給httpresponsemessage新增乙個access-control-allow-origin header

//有access-control-allow-origin響應頭,瀏覽器才會把響應給客戶端,*表示允許任何**的請求

response.headers.add("access-control-allow-origin", "*");

return

response;

}

在webconfig檔案中配置以下節點,使用配置檔案時要先移除後新增,確保起作用
<

1.新增乙個名為cores的過濾器

///

///跨域

///public

class

cores:actionfilterattribute

}

新增一行**: config.filters.add(new cores()); 我們也可以不適用全域性過濾器,在controller,action上新增特性即可。

1.安裝,直接在nuget命令列輸入:

install-package microsoft.aspnet.webapi.cors
2.在webapiconfig.cs註冊

config.enablecors();
3.在controller或者action上新增特性,即可完成跨域

cors規範引入了幾個支援跨源請求的新http頭。如果瀏覽器支援cors,它會自動為跨源請求設定這些標頭。

乙個簡單型別跨域,請求時會新增乙個origin,值為請求的源

如果伺服器允許請求的源可以訪問,就在響應時新增乙個access-control-allow-origin,其值和請求中的origin相同,否則返回乙個正常的響應。瀏覽器在收到響應時根據是否有access-control-allow-origin判斷是否把響應中的資源交給請求的源。

1.2.

WebApi中使用Ninject 依賴注入

之前ninject依賴注入是在mvc中使用,最近在webapi中使用,用之前的mvc方式發現使用介面注入,一直是null錯誤,網上查詢了一些資源,總結一下,以後備用。主要分為以下幾步驟 在nuget上安裝ninject.mvc 我安裝的是最新版本nuget上安裝ninject.mvc5 定義兩個類n...

使用CORS解決跨域問題

一 產生跨域的原因 瀏覽器會向伺服器傳送乙個option方法的預檢請求,如果伺服器拒絕響應,瀏覽器就無法訪問。因此我們可以針對option請求來處理跨域問題。二 解決辦法 在spingboot中針對option請求新增乙個准入機制 public static void main string arg...

使用CORS解決跨域問題

先說跨域,跨域是指跨網域名稱 通訊協議 網域名稱 埠 的訪問,也就是說通訊協議 網域名稱 埠這三者中有一樣不同就屬於跨域 而跨域不一定會產生跨域問題,跨域問題的產生是瀏覽器對於ajax請求的一種安全限制,乙個頁面發起的請求必須是與當前網域名稱一樣,否則,會產生跨域問題。access to xmlht...