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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top