關於WebAPI跨域踩到的一點坑

2022-02-08 21:35:57 字數 2260 閱讀 6373

最近在嘗試前後端分離的webapi+angularjs方案,在率先處理授權的時候,踩到了一點webapi跨域的坑,其實嚴格意義上來說也不算是坑吧,只是我自己對webapi不熟悉而已,這裡我與大家分享一下。

先說一下我這邊遇到的情況:

我是在做登入功能,使用的是微軟的owin提供的元件來實現

在web.config中system.webserver節點下面,增加配置項,設定輸出的http header,類似於如下**,主要是httpprotocol中的**:

在web.config中增加相應配置之後,發現雖然header中會有相應的跨域需要的header,但是每次我請求token的post請求都會自動變成options請求最終導致400失敗,而且f12檢視瀏覽器沒有報關於跨域失敗的錯誤。

這是網上的第二種,也是最多的一種方案,引用這個類庫,然後在webapiconfig.cs中register方法中進行註冊,大概**如下:

var cors = new enablecorsattribute("

*", "

*", "*"

);globalconfiguration.configuration.enablecors(cors);

就這兩行,然後我把web.config中的**拿掉,只加這個的時候,瀏覽器端response回來的根本就沒有了跨域的header,再次宣布失敗~

加上之後,我直接使用angularjs向後端post乙個json物件,類似於如下:

var logindata =;

發現請求成功了,但是授權卻失敗了,他告訴我說grant_type不受支援,但是我確定我的這個引數傳遞的沒有任何問題,經過一番查閱資料,發現需要把這個改成類似於url傳遞引數的形式(原因未查明):

var requestdata="grant_type=password&username=" + logindata.username + "&password=" + logindata.password;

經過如上一番折騰,終於可以在客戶端正確獲取token.

關於作用域的一點總結

當變數在程式中宣告之後,它只在程式的一定範圍內才可以訪問。這個範圍是由識別符號的作用域決定。舉例說明,函式的區域性變數的作用域是該函式的函式體。其他函式無法通過這些變數的名字來訪問它們,因為這些變數在它們的作用域之外就不在有效。再則,你可以在不同的作用域內給不同變數起同乙個名字。作用域的分類 全域性...

同源策略與跨域的一點了解

協議 網域名稱 埠 全部一致則說明同源!下表給出了相對同源檢測的示例 url結果 原因成功 只有路徑不同 成功 只有路徑不同 失敗 不同協議 https和http 失敗 不同埠 http 80是預設的 失敗 不同網域名稱 news和store 由同乙個源載入的文件或指令碼禁止訪問另乙個源的資源。出於...

WebApi 一 實現跨域返回格式支援json

1.建立webapi 2.安裝之後如果報錯執行如下步驟截圖 開啟程式包控制台輸入 install package microsoft.aspnet.webapi includeprerelease如下 1.在webapiconfig下配置全域性通用 加入 跨域請求 var cors new enab...