ASP.NET MVC: Applicare richiesta AJAX su un ricorso
-
09-10-2019 - |
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 ??strong> 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ò.
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. ;)