2

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

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

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

谢谢你。

4

1 回答 1

6

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

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

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

[AjaxOnly]
public ActionResult Index()
{

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

[AjaxOnly]
public class HomeController : Controller
{

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

于 2013-03-06T20:34:03.673 回答