Вопрос

Я ищу способ обеспечить доступ к действию контроллера только через запрос 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 (), я вставляю из кода, который у меня есть, но «потерянный» этот метод. ;)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top