Domanda

Sto cercando un modo per far rispettare l'azione di un controller a cui accedere solo tramite una richiesta AJAX.

Qual è il modo migliore per farlo prima che il metodo azione è chiamata Voglio refactoring seguente dai miei metodi d'azione:?

if(Request.IsAjaxRequest())
    // Do something
else
    // return an error of some sort

Quello che sto Envisioning è un ActionMethodSelectorAttribute che può essere utilizzato come l'attributo [AcceptVerbs]. Non ho esperienza crating tale attributo personalizzato però.

È stato utile?

Soluzione

Crea un ActionFilter che gli incendi OnActionExecuting

public class AjaxActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!filterContext.HttpContext.Request.IsAjaxRequest())
            filterContext.Result = new RedirectResult(//path to error message);           
    }
}

Impostazione proprietà Risultato del filtro impedirà l'esecuzione del ActionMethod.

Si può quindi applicare come un attributo ai vostri ActionMethods.

Altri suggerimenti

La sua semplice come questo:

public class AjaxOnly : ActionMethodSelectorAttribute
{
    public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
    {
        return controllerContext.HttpContext.IsAjaxRequest();
    }
}

Ho appena dimenticare dove IsAjaxRequest () proviene, sto incollando dal codice che ho, ma "perso" quel metodo. ;)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top