仅限网站上的控制器操作

时间:2013-03-06 20:21:31

标签: javascript jquery asp.net ajax asp.net-mvc

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

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

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

谢谢。

1 个答案:

答案 0 :(得分: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,但与往常一样,开发人员只能了解他们的要求。因此,我建议您考虑是否希望以“更柔和”的方式处理此问题,以重定向到警告页面。