最近在嘗試前後端分離的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...