2011-12-07 18 views
16

Sto utilizzando un ActionFilter per determinare se un utente ha accesso a una risorsa specifica come un oggetto Account (a la Rhino Security) prima di eseguire un'azione. Si tratta di un filtro globale, che reindirizza a una pagina di errore se il valore di autorizzazione fallireASP.NET MVC ActionFilter - Determina se richiesta AJAX

Sto utilizzando il seguente codice, che funziona bene per le richieste a piena pagina:

filterContext.Controller.TempData["ErrorMessage"] = string.Format("You are not authorized to perform operation: {0}", operation); 
filterContext.Result = new RedirectResult("~/Error/AuthorizationError"); 

richieste Ajax Io non voglio applicare un reindirizzamento, ma piuttosto restituire un messaggio di errore. C'è un modo per dire all'interno del filtro azione se si tratta di una richiesta AJAX o di una normale pagina intera (mi spiace non sono sicuro della terminologia corretta) richiesta?

Grazie in anticipo

JP

risposta

37

Si potrebbe utilizzare il metodo IsAjaxRequest estensione:

if (filterContext.HttpContext.Request.IsAjaxRequest()) 
{ 
    // it was an AJAX request 
    ... 
} 
else 
{ 
    // it was a standard request 
    filterContext.Controller.TempData["ErrorMessage"] = string.Format("You are not authorized to perform operation: {0}", operation); 
    filterContext.Result = new RedirectResult("~/Error/AuthorizationError"); 
} 
+1

Questo sembra esattamente quello che stiamo cercando di fare. Ma ... per qualche motivo quella condizione 'filterContext.HttpContext.Request.IsAjaxRequest()' non tornerà vera quando si tratta di una richiesta AJAX. Inoltre ... come reindirizzare l'utente a una nuova pagina da una richiesta Ajax? – Aarmora

+0

@Aarmora - Curioso, hai mai risolto il tuo problema? – bubbleking

+0

@bubbleking Vorrei avere una buona risposta per voi. Non riesco nemmeno a ricordare quale pagina stavamo provando con questo. Scusate :( – Aarmora