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.

¿Fue útil?

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. ;)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top