识别 ASP.NET MVC 代码中的 Angular js AJAX 调用

Posted

技术标签:

【中文标题】识别 ASP.NET MVC 代码中的 Angular js AJAX 调用【英文标题】:Identify angular js AJAX calls in ASP.NET MVC code 【发布时间】:2016-01-13 22:05:52 【问题描述】:

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

在服务器端代码中,我写了一个Action过滤属性,其中我需要检查请求是普通请求(浏览器)还是AJAX请求。

public override void OnActionExecuting(ActionExecutingContext filterContext)

    if ( filterContext.HttpContext.Request.IsAjaxRequest())
     

     

如果使用 $http Angular 服务发出 AJAX 请求,上述代码 sn-p "IsAjaxRequest()" 中提到的方法不会返回 TRUE。

我观察到请求没有 X-Requested-With header ,即使添加 header 也没有解决请求。

注意:这不是 CORS 调用。

所以我的问题。

    filterContext.HttpContext.Request.IsAjaxRequest()如何判断请求是否为AJAX?

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

【问题讨论】:

仅供参考,它是开源的,您可以查看实际实现:aspnetwebstack.codeplex.com/SourceControl/latest#src/… @Keith Rousseau 提供的链接将来应该对我有所帮助.. 【参考方案1】:

它通过查看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中看到为什么它不见了

【讨论】:

事实上我确实添加了建议的标题,但问题在于 header 的值,而不是 "XMLHttpRequest" 它是 "true" ,天知道我为什么给出这个值:)。提供的链接也很有帮助。谢谢。

以上是关于识别 ASP.NET MVC 代码中的 Angular js AJAX 调用的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 3 无法识别 .cshtml 视图文件

ASP.NET MVC 验证器无法识别引导程序 DatePicker 格式

ASP.NET MVC中Unobtrusive Ajax的妙用

从 ASP.NET MVC 中的字符串获取 Html 代码

asp.net mvc 代码优先方法中的日期验证

ASP.net MVC 代码片段问题中的 Jqgrid 实现