2011-12-07 32 views
16

Estoy usando un ActionFilter para determinar si un usuario tiene acceso a un recurso específico como un objeto Account (a la Rhino Security) antes de iniciar una acción. Se trata de un filtro global que redirige a una página de error si el valor de autorización fallaráASP.NET MVC ActionFilter - Determine si AJAX Request

estoy usando el siguiente código, que funciona bien para las solicitudes de página completa:

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

peticiones Ajax que no quiero a aplicar una redirección, sino devolver un mensaje de error. ¿Hay alguna manera de decir dentro del filtro de acción si se trata de una solicitud AJAX o una solicitud de página completa normal (lo siento no estoy seguro de la terminología correcta)?

Gracias de antemano

JP

Respuesta

37

podría utilizar el método IsAjaxRequest extensión:

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

Esto parece exactamente lo que estamos tratando de hacer. Pero ... por alguna razón, esa condición 'filterContext.HttpContext.Request.IsAjaxRequest()' no vuelve verdadera cuando se trata de una solicitud AJAX. Además ... ¿cómo redirigirías al usuario a una nueva página desde una solicitud de Ajax? – Aarmora

+0

@Aarmora - Curioso, ¿alguna vez resolvió su problema? – bubbleking

+0

@bubbleking Ojalá tuviera una buena respuesta para usted. Ni siquiera puedo recordar qué página estábamos intentando con esto. Lo siento :( – Aarmora