2013-09-25 49 views
12

有没有办法判断请求是否是Angular(1.1.5)$资源请求。我非常想为这种类型的请求寻找一个“Request.IsAjaxRequest()”方法。

我期待本作中的被覆盖的AuthorizeAttribute的HandleUnauthorizedRequest我需要上下文结果集的一些JSON如果一个Ajax或角度的请求或别的东西,如果没有。

+0

为什么不使用简单的系统令牌?或者你只是想在ajax请求和经典的mvc请求之间做出区别? –

+1

只是想知道区别,以便我可以发回json或重定向到另一个mvc视图。 –

+0

MVC方法Request.IsAjaxRequest没有帮助吗? – Chandermani

回答

35

我不太了解MVC3,但您可以为来自AngularJS的所有请求设置自定义标头。

然后在服务器端,您只需要得到这个头,做你想从角度要求什么。

要在AngularJS自定义标题只是这样做:

angular.module('myModule', []) 

    .config(['$httpProvider', function($httpProvider) { 

     $httpProvider.defaults.headers.common["FROM-ANGULAR"] = "true"; 

    }]) 

对于使用X-要求,有了你必须这样做太:

$httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest'; 

这不是默认设置了,因为社会的很多部分需要删除这个头,使CORS请求

+0

干杯,这很好,尽管我最初希望有一个头部已经在那里我可以检查。你知道为什么它不会与X-Requested-With一起发送吗? –

+1

默认情况下现在没有yes。 https://github.com/angular/angular.js/commit/3a75b1124d062f64093a90b26630938558909e8d –

+0

我编辑了答案 –

0

@Thomas庞斯答案是善,尽AngularJS要求标准与Web默认秒。但对于具有多个角度模块的大型应用程序,我觉得为每个模块设置起来很麻烦。

不仅如此,但可能你需要检查,如果你要使用角度的要求之外的JSON响应回复。在这种情况下,我更愿意检查Accept请求标头:

var accepted = HttpContext.Request.Headers["Accept"].Split(','); 

if (accepted .Any(x => x == "application/json")) 
{ 
    // Send your JsonResult here 
} 
else 
{ 
    // Send your Html/Content result here 
}