2013-09-25 70 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 
}