在ASP.NET MVC代码

时间:2015-10-15 12:33:18

标签: ajax angularjs asp.net-mvc

我正在使用ASP.NET MVC和AngularJS开发示例应用程序。

在服务器端代码中,我编写了一个Action过滤器属性,我需要检查请求是否是正常请求(浏览器)或AJAX请求。

public override void OnActionExecuting(ActionExecutingContext filterContext)
{
    if ( filterContext.HttpContext.Request.IsAjaxRequest())
     {

     }
}

上面代码片段中提到的方法" IsAjaxRequest()"如果使用$ http Angular服务发出AJAX请求,则不返回TRUE。

我发现请求没有X-Requested-With标头,甚至添加标头也没有解决请求。

注意:这不是CORS电话。

所以我的问题。

  1. filterContext.HttpContext.Request.IsAjaxRequest()如何决定请求是否为AJAX?

  2. 我可以检查请求标头(是否有特定标头)并确定请求是否为AJAX。这是正确而唯一的方法吗?

1 个答案:

答案 0 :(得分:18)

它通过查看是否存在X-Requested-With标头来决定。 您可以手动将X-Request-With标头添加到$http服务。

个人请求

$http.get('/controller/action', {
   headers: {
    'X-Requested-With': 'XMLHttpRequest'
   }
});

对于每个请求

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

您可以从Angular

中了解原因