仅限网站上的控制器操作

Ale*_* Dn 2 javascript asp.net ajax asp.net-mvc jquery

是否可以将我的操作方法的控制器操作访问限制为仅限AJAX的请求?

我的意思是非Ajax请求操作它将被重定向到404或抛出错误.如果JS在我自己的页面上发出请求,则Action仅返回正确的结果.

我试着谷歌,但没有找到答案.我了解到我可以为此目的实现自定义过滤器,但是它可能已经存在于MVC中了吗?

谢谢.

Dav*_*ich 6

创建自定义操作方法选择器以阻止非Ajax调用

public class AjaxOnlyAttribute : ActionMethodSelectorAttribute
{
    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
    {
        return controllerContext.HttpContext.Request.IsAjaxRequest();
    }
}
Run Code Online (Sandbox Code Playgroud)

您的属性将以经典方式应用

[AjaxOnly]
public ActionResult Index()
{
Run Code Online (Sandbox Code Playgroud)

或者您可以将其应用于您的控制器

[AjaxOnly]
public class HomeController : Controller
{
Run Code Online (Sandbox Code Playgroud)

我不确定我会建议您将用户发送到404,但与往常一样,开发人员只能了解他们的要求.因此,我建议您考虑是否希望以"更柔和"的方式处理此问题,以重定向到警告页面.