ASP.NET MVC: Hacer cumplir petición AJAX en una acción
-
09-10-2019 - |
Pregunta
Estoy buscando una manera de hacer cumplir la acción de un controlador para acceder sólo a través de una petición AJAX.
¿Cuál es la mejor manera de hacer esto antes de llamar al método de acción Quiero refactorizar lo siguiente de mis métodos de acción:?
if(Request.IsAjaxRequest())
// Do something
else
// return an error of some sort
Lo que yo soy es una previsión de ActionMethodSelectorAttribute
que puede ser utilizado como el atributo [AcceptVerbs]
. No tengo ninguna experiencia crating como un atributo personalizado sin embargo.
Solución
Crea una ActionFilter que los incendios OnActionExecuting
public class AjaxActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.IsAjaxRequest())
filterContext.Result = new RedirectResult(//path to error message);
}
}
Configuración de la propiedad Resultado del filtro impedirá la ejecución de la ActionMethod.
A continuación, puede aplicarlo como un atributo a sus ActionMethods.
Otros consejos
Es tan simple como esto:
public class AjaxOnly : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
{
return controllerContext.HttpContext.IsAjaxRequest();
}
}
acabo de olvidar dónde IsAjaxRequest () viene, estoy pegando de código que tengo, pero "perdido" ese método. ;)