2015-10-15 4 views
12

Sto lavorando su un'applicazione di esempio utilizzando ASP.NET MVC e AngularJS.Identifica js angolari Chiamate AJAX nel codice ASP.NET MVC

Nel codice lato server, ho scritto un attributo filtro Azione, e in questo ho bisogno di verificare se la richiesta è una richiesta normale (Browser) o richiesta AJAX.

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    if (filterContext.HttpContext.Request.IsAjaxRequest()) 
    { 

    } 
} 

Il metodo di cui al codice di cui sopra frammento di "IsAjaxRequest()" non restituisce TRUE in caso di richiesta AJAX realizzati con $ http servizio angolare.

Ho osservato che la richiesta non ha l'intestazione X-Requested-With, e anche l'aggiunta dell'intestazione non ha risolto la richiesta.

Nota: questa NON è una chiamata CORS.

Quindi la mia domanda.

  1. Come si fa filterContext.HttpContext.Request.IsAjaxRequest() decidere se la richiesta è AJAX o no?

  2. Posso controllare l'intestazione della richiesta (se ha una particolare intestazione o meno) e decidere se la richiesta è AJAX oppure no. È l'approccio giusto e solo?

+1

Solo una cronaca che è open source e si può guardare l'effettiva attuazione : https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/AjaxRequestExtensions.cs –

+0

@Keith Rousseau Link fornito dovrebbe essere utile per me in futuro .. – refactor

risposta

18

Decide se esiste o meno l'intestazione X-Requested-With. È possibile aggiungere l'intestazione X-Request-With manualmente al servizio $http.

richiesta individuale

$http.get('/controller/action', { 
    headers: { 
    'X-Requested-With': 'XMLHttpRequest' 
    } 
}); 

Per ogni richiesta

app.config(['$httpProvider', function ($httpProvider) { 
    $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest'; 
}]); 

Si può vedere il motivo per cui non è presente Angular

+0

In effetti ho aggiunto l'intestazione suggerita, ma il problema era con il valore dell'intestazione, invece di "XMLHttpRequest" era "vero", Dio solo sa perché ho dato quel valore :). Il collegamento fornito è anche utile. Grazie. – refactor