2013-09-25 12 views
12

jest sposobem na stwierdzenie, czy żądanie jest żądaniem zasobów kątowych (1.1.5) $. Właściwie szukam metody "Request.IsAjaxRequest()" dla tego typu żądania.

Rozglądam się tak jak w HandleUnauthorizedRequest overriden AuthorizeAttribute Potrzebuję ustawić wynik kontekstu dla jakiegoś json, jeśli Ajax lub żądanie kątowe lub coś innego, jeśli nie.

+0

Dlaczego nie używać prostego tokena systemowego? A może chcesz tylko odróżnić zapytanie ajax od klasycznego żądania mvc? –

+1

Po prostu staram się poznać różnicę, aby móc odesłać json lub przekierować do innego widoku mvc. –

+0

Czy metoda MVC 'Request.IsAjaxRequest' nie pomaga? – Chandermani

Odpowiedz

35

Nie znam dobrze MVC3, ale możesz ustawić niestandardowy nagłówek dla wszystkich żądań z AngularJS.

Następnie po stronie serwera wystarczy uzyskać ten nagłówek i zrobić to, co chcesz, na żądanie od kątowego.

Aby mieć niestandardowy nagłówek w angularjs po prostu to zrobić:

angular.module('myModule', []) 

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

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

    }]) 

Do stosowania X-Requested-With trzeba to zrobić za:

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

To nie jest ustawiony domyślnie, ponieważ już znaczna część społeczności musi usunąć ten nagłówek, aby umożliwić żądanie CORS

+0

Pozdrawiam, to działa dobrze, chociaż początkowo miałem nadzieję, że nagłówek już tam jest, mógłbym sprawdzić . Czy wiesz, dlaczego nie jest wysyłany z X-Requested-With? –

+1

Domyślnie teraz nie przed tak. https://github.com/angular/angular.js/commit/3a75b1124d062f64093a90b26630938558909e8d –

+0

Edytowałem odpowiedź –

0

@ Odpowiedź Thomas Pons jest dobra i sprawić, że AngularJS żąda standardu z domyślnym adresem internetowym s. Ale w przypadku dużej aplikacji z kilkoma modułami kątowymi uważam za kłopotliwe ustawienie każdego modułu.

Nie tylko to, ale ewentualnie trzeba sprawdzić, czy należy odpowiedzieć odpowiedzią JSON poza żądaniem kątowym. W takim przypadku preferuję sprawdzanie nagłówka żądania:

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 
}