AngularJS的$resource未发送X-Requested-With头信息

47

我正在使用Angular 1.1.5,并且正在使用$resource向REST服务发出XHR请求,但似乎$resource没有将头部附加为X-Requested-With作为XMLHttpRequest,这是正常行为吗?我需要手动附加头部吗?

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);
    };
}

$resource不支持headers。您可能需要切换使用$http。 - zs2020
自从1.1.3版本以来,它已经可以做到了。 - pedrommuller
3
我认为你仍然需要在$http中进行设置,类似于$http.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'。 - zs2020
实际上,我可以手动添加标题,例如headers: {'X-Requested-With': 'XMLHttpRequest'},它可以工作,但为什么它不会默认发送呢? - pedrommuller
我也在想同样的问题:https://dev59.com/zmMk5IYBdhLWcg3wvQcU#19001632 - Breandán
3个回答

109

只需将此内容添加到您的应用程序中即可

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

2
Laravel 5.1期望使用此标头来确定请求是否为“ajax请求”。 - Rubens Mariuzzo
太好了,现在我们如何在Angular2中实现呢? - Ayyash
我已经找了将近一周,就在我发表评论的时候,我找到了答案 :/ https://angular.io/docs/ts/latest/api/http/BaseRequestOptions-class.html - Ayyash
为了让Asp.Net MVC正确识别Request.IsAjaxRequest(),您需要这个。 - FirstVertex
@Ayyash 新链接? - Jeff
@Jeff https://angular.io/docs/ts/latest/api/http/index/BaseRequestOptions-class.html - Ayyash

26

以前是这样的,但已经改变了。 (在这里查看)

根据Thomas Pons在这里的回答:“X-Requested-With标头在实践中很少使用,我们一直使用它会触发跨域请求的预检查。”


3
很好知道这个,我正在使用它来验证 servicestack 中的 antiForgeryToken 属性的请求,问题是我需要验证是否为 ajax 请求,以确保该请求至少是由表单发出的。现在的问题是:“在服务器端如何知道该请求是否为 ajax 请求?”谢谢回答! - pedrommuller
我会给你一个+1,因为你提供了实际提交的额外参考。 - kumarharsh

2

我曾经遇到过同样的问题,使用以下方法解决:

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

您还可以设置头部接受 application/json:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接