ASP.NET MVC: принудительно выполнить запрос AJAX на действие
Я ищу способ принудительного выполнения действия контроллера, доступ к которому возможен только через запрос AJAX.
Каков наилучший способ сделать это до вызова метода действия? Я хочу реорганизовать следующее из моих методов действий:
if(Request.IsAjaxRequest())
// Do something
else
// return an error of some sort
То, что я представляю, - это ActionMethodSelectorAttribute
, который может использоваться как атрибут [AcceptVerbs]
. Однако у меня нет опыта в создании такого настраиваемого атрибута.
Ответы
Ответ 1
Создайте ActionFilter, который запускает OnActionExecuting
public class AjaxActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.IsAjaxRequest())
filterContext.Result = new RedirectResult(//path to error message);
}
}
Настройка свойства Result фильтра предотвратит выполнение ActionMethod.
Затем вы можете применить его как атрибут к вашим ActionMethods.
Ответ 2
Это так просто:
public class AjaxOnly : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(ControllerContext controllerContext, System.Reflection.MethodInfo methodInfo)
{
return controllerContext.HttpContext.IsAjaxRequest();
}
}
Я просто забываю, откуда приходит IsAjaxRequest(), я вставляю код, который у меня есть, но "потерял" этот метод.;)