因此,這對我們來說是一場巨大的鬥爭。 我們有一個web API .net MVC4後端。我們正在爲客戶端使用角度。我們有一個頁面,有一些我們從中接收數據的JSON。當我們對這個頁面進行GET時,我們會收到數據。只要我們將自定義標題添加到調用中,GET就變成了OPTIONS,我們得到了200,沒有任何迴應。我們正在做一些事情,比如在「login」上創建一個BASE64代碼,將其存儲爲一個cookie並嘗試將其添加到GET頭中。問題是我們已經刪除了所有不必要的代碼,並且仍然存在相同的問題。即使關閉了數據的授權。這裏是GET代碼:GET上的角JS自定義頭變爲選項
myApp.factory("projectDataService", function ($http, $location, $cookieStore) {
var token = "";
token = $cookieStore.get('token');
return {
getProject: function (successcb) {
$http({ method: "GET", url: "http://dev.projnik.com/api/project", headers: { 'Authorization': 'Basic ' + token } }).
success(function (data, status, headers, config) {
successcb(data);
}).
error(function (data, status, headers, config) {
console.log(data, status, headers, config);
});
},
save: function (project) {
$http({ method: "POST", url: "http://dev.projnik.com/api/project", data: $.param(project) }).
success(function (data, status) {
if (status == '201') {
$location.path('/all');
}
})
}
};
});
而且app.js:
var myApp = angular.module('Project', ['ngResource', 'ngCookies']);
myApp.config(function($routeProvider){
$routeProvider.
when('/new', {templateUrl:'templates/new.html', controller:'EditProjectController'}).
when('/mobile', {templateUrl:'templates/mobile.html', controller:'ProjectController'}).
when('/it', {templateUrl:'templates/it.html', controller:'ProjectController'}).
when('/writing', {templateUrl:'templates/writing.html', controller:'ProjectController'}).
when('/all', { templateUrl: 'templates/all.html' }).
when('/cookie', { templateUrl: 'partials/cookiecontrollerhtml.html' }).
when('/login', { templateUrl: 'partials/_login.html' }).
otherwise({ redirectTo: '/all' });
});
myApp.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);
同樣,無需添加標題屬性的號召,一切正常(當然我們得到使用授權401的API中打開)。我們願意爲此付費。
我們在這裏公開我們的實際域名,這很好。如果有人訪問www.projnik.com並單擊頂部的登錄鏈接並輸入shane,用戶名密碼,密碼,他們將收到cookie,並將用戶路由回到他們將獲取數據的#/ all頁面,儘管它不起作用。 PS:我試過ad withCredentials = true;來電,我得到相同的結果。
對於允許cookie,您需要設置一個像這樣的頭:'HttpContext.Current.Response.AddHeader(「Access-Control-Allow-Credentials」,「true」);'。確保在客戶端使用'withCredentials:true'。 – Badri
當使用nuget包啓用cors時,我放置的任何其他代碼是否嘗試使此工作發生更改? – Jeff