ASP.NET MVC: Erzwingen AJAX-Request auf eine Aktion
-
09-10-2019 - |
Frage
ich nach einer Möglichkeit, ein Controller-Aktion zu erzwingen nur über eine AJAX-Anforderung abgerufen werden.
Was ist der beste Weg, dies zu tun, bevor die Aktion Methode wird aufgerufen, Ich mag folgendes von meiner Aktion Methoden Refactoring:
if(Request.IsAjaxRequest())
// Do something
else
// return an error of some sort
Was ich Absehen ist ein ActionMethodSelectorAttribute
, das wie das [AcceptVerbs]
Attribut verwendet werden kann. Ich habe keine Erfahrung so ein benutzerdefiniertes Attribut Kistenverpackungen though.
Lösung
Eine Action dass Brände OnActionExecuting
public class AjaxActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.IsAjaxRequest())
filterContext.Result = new RedirectResult(//path to error message);
}
}
Zur Einstellung des Result-Eigenschaft des Filters wird die Ausführung des ActionMethod verhindern.
Sie können dann gelten sie als Attribut zu Ihrem ActionMethods.
Andere Tipps
Seine so einfach wie folgt aus:
public class AjaxOnly : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
{
return controllerContext.HttpContext.IsAjaxRequest();
}
}
ich nur vergessen, wo IsAjaxRequest () herkommt, ich bin aus dem Code einfügen Ich habe aber „verloren“ diese Methode. ;)