Я думаю, вы имеете в виду:
Как разрешить только запросы AJAX?
Если это так, просмотрите следующую запись блога.Он описывает создание многоразового фильтра:
Атрибут AjaxOnly
Код кажется довольно простым, но я сам не использовал его:
public class AjaxOnlyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(!filterContext.HttpContext.Request.IsAjaxRequest())
filterContext.HttpContext.Response.Redirect("/error/404");
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
}
}
То, что вы затем можете применить к контроллерам и действиям:
[AjaxOnly]
public ActionResult AjaxActionMethod()
{
//....
}
Код фильтра предполагает наличие действия на некотором контроллере, которое может быть достигнуто по следующему маршруту:
/error/404
В результате я изменил код и создал простой способ добавления маршрута произвольной ошибки (со значением по умолчанию "/ error / 404"):
public class AjaxOnlyAttribute : ActionFilterAttribute
{
public AjaxOnlyAttribute(){}
public AjaxOnlyAttribute(string ErrorRoute)
{
this.ErrorRoute = ErrorRoute;
}
string errorRoute = "/Error/404"; // default route
public string ErrorRoute
{
get { return errorRoute; }
set { errorRoute = value; }
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.Request.IsAjaxRequest())
filterContext.HttpContext.Response.Redirect(this.ErrorRoute); //
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
}
}
Теперь это можно использовать какследует:
[AjaxOnly(ErrorRoute = "/MyArbitraryRoute/MyArbitraryParameter")
public ActionResult AjaxActionMethod()
{
//....
}