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