Question

Je suis à la recherche d'un moyen de faire respecter l'action d'un contrôleur accessible uniquement via une requête AJAX.

Quelle est la meilleure façon de le faire avant que la méthode d'action est appelée Je veux factoriser les éléments suivants de mes méthodes d'action:

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

Ce que je suis envisioning est un ActionMethodSelectorAttribute qui peut être utilisé comme l'attribut [AcceptVerbs]. Je n'ai aucune expérience de mise en caisse un tel attribut personnalisé bien.

Était-ce utile?

La solution

Créer un ActionFilter que les feux OnActionExecuting

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

Réglage de propriété Résultat du filtre empêche l'exécution du ActionMethod.

Vous pouvez ensuite appliquer comme un attribut à votre ActionMethods.

Autres conseils

est aussi simple que ceci:

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

J'oublie juste où IsAjaxRequest () vient, je coller du code que j'ai mais « perdu » cette méthode. ;)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top