2013-09-25 8 views
12

esiste un modo per determinare se una richiesta è una richiesta di risorse $ Angular (1.1.5). Sto cercando un metodo "Request.IsAjaxRequest()" per questo tipo di richiesta.

Sto cercando questo come nel HandleUnauthorizedRequest di overriden AuthorizeAttribute Ho bisogno di impostare il risultato del contesto su qualche json se un Ajax o richiesta angolare o qualcos'altro se non.

+0

Perché non utilizzare un token di sistema semplice? O vuoi solo fare la differenza tra la richiesta ajax e la classica richiesta mvc? –

+1

Sto solo cercando di capire la differenza in modo da poter rispedire json o reindirizzare a un'altra vista di mvc. –

+0

Il metodo MVC 'Request.IsAjaxRequest' non è d'aiuto? – Chandermani

risposta

35

Non conosco bene MVC3 ma è possibile impostare un'intestazione personalizzata per tutte le richieste da AngularJS.

Quindi sul lato server è sufficiente ottenere questa intestazione e fare ciò che si desidera con la richiesta da angolare.

Avere intestazione personalizzata in AngularJS basta fare questo:

angular.module('myModule', []) 

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

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

    }]) 

Per l'uso della X-richiesta-Con quello che dovete fare anche questo:

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

non è impostata di default più perché buona parte della comunità deve cancellare questa intestazione per abilitare la richiesta CORS

+0

Cheers, questo funziona bene, anche se inizialmente speravo che ci fosse già una testata là dentro potrei controllare . Sai perché non viene inviato con X-Requested-With? –

+1

Per impostazione predefinita ora non prima di si. https://github.com/angular/angular.js/commit/3a75b1124d062f64093a90b26630938558909e8d –

+0

Ho modificato la risposta –

0

@Thomas Pons risposta è buona e rendere le richieste AngularJS standard con il Web predefinito S. Ma per applicazioni di grandi dimensioni, con diversi moduli angolari, trovo complicato impostarlo per ciascun modulo.

Non solo, ma probabilmente è necessario verificare se è necessario rispondere con una risposta JSON al di fuori della richiesta di angular. In tal caso, preferisco controllare l'intestazione della richiesta 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 
} 
Problemi correlati