我正在使用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电话。
所以我的问题。
filterContext.HttpContext.Request.IsAjaxRequest()如何决定请求是否为AJAX?
我可以检查请求标头(是否有特定标头)并确定请求是否为AJAX。这是正确而唯一的方法吗?
答案 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
中了解原因