ASP.NET MVC: Faire respecter la demande AJAX sur une action
-
09-10-2019 - |
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.
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. ;)