2013-08-11 27 views
44

Tôi đang sử dụng góc 1.1.5 và tôi đang sử dụng tài nguyên $ để tạo XHR cho dịch vụ REST nhưng có vẻ như tài nguyên $ không phụ thêm tiêu đề như X-Requested-With như XMLHttpRequest, là một hành vi bình thường? và tôi có cần phải thêm tiêu đề theo cách thủ công không?

function loginCtrl($scope,$resource) { 
    $scope.submit = function() { 
     var resource = $resource('/Api/User/login', {}, 
       { 
        authenticate: { 
         method: 'POST', 
         isArray: false, 
         headers: { 
          '__RequestVerificationToken': $scope.loginRequest.Token 

         } 
        } 
       }); 
     resource.authenticate($scope.loginRequest); 
    }; 
} 
+0

$ tài nguyên không hỗ trợ tiêu đề. bạn có thể cần phải chuyển sang sử dụng $ http – zsong

+0

, tôi nghĩ rằng kể từ phiên bản 1.1.3 –

+3

Tôi nghĩ bạn vẫn phải đặt nó ở $ http, một cái gì đó như $ http.defaults.headers.common ['X-Requested-With '] =' XMLHttpRequest ' – zsong

Trả lời

101

Chỉ cần thêm video này vào ứng dụng của bạn

myAppModule.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 
}]); 
+2

Laravel 5.1 mong đợi tiêu đề này để xác định yêu cầu là “yêu cầu ajax”. –

+0

tuyệt vời, bây giờ, làm thế nào để chúng tôi làm điều đó trong Angular2? – Ayyash

+0

Tôi đã tìm kiếm gần một tuần và ngay khi tôi nhận xét, tôi đã tìm thấy câu trả lời:/https://angular.io/docs/ts/latest/api/http/BaseRequestOptions-class.html – Ayyash

25

Được sử dụng nhưng đã được thay đổi. (see here)

"Đầu đề X-Requested-With hiếm khi được sử dụng trong thực tế và bằng cách sử dụng tất cả thời gian chúng tôi đang kích hoạt kiểm tra preflight cho tên miền chéo yêu cầu".

Từ câu trả lời của Thomas Pons here.

+3

nó là tốt để biết, tôi đang sử dụng nó bởi vì tôi đang xác nhận yêu cầu với một thuộc tính antiForgeryToken trong servicestack, điều là tôi xác nhận là một yêu cầu ajax để biết rằng ít nhất yêu cầu đó đã được thực hiện từ một biểu mẫu, bây giờ câu hỏi là: "làm thế nào tôi có thể biết ở phía máy chủ nếu yêu cầu đó là ajax?", cảm ơn câu trả lời! –

+0

Tôi sẽ cung cấp cho bạn +1 để tham khảo bổ sung cho cam kết thực tế. –

1

tôi đã cùng một vấn đề và tôi giải quyết nó bằng cách sử:

myApp.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; 
}]); 

Ngoài ra bạn có thể thiết lập các tiêu đề để chấp nhận application/json:

$http({ 
    method: 'GET', 
    url: '/someUrl', 
    headers: { Accept: 'application/json' } 
})