Javascript 仅从网站限制控制器操作

Javascript 仅从网站限制控制器操作,javascript,jquery,asp.net,ajax,asp.net-mvc,Javascript,Jquery,Asp.net,Ajax,Asp.net Mvc,是否可以将我的操作方法的控制器操作访问限制为仅AJAX请求 我的意思是,一个非Ajax的动作请求将被重定向到404或抛出错误。如果JS在我自己的页面上提出请求,操作将只返回正确的结果 我试着用谷歌搜索,但没有找到答案。我了解到我可以实现自定义过滤器,但它可能已经存在于MVC中了 谢谢。创建自定义操作方法选择器以阻止非Ajax调用 public class AjaxOnlyAttribute : ActionMethodSelectorAttribute { public override

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

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

我试着用谷歌搜索,但没有找到答案。我了解到我可以实现自定义过滤器,但它可能已经存在于MVC中了


谢谢。

创建自定义操作方法选择器以阻止非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,但与往常一样,只有开发人员了解他们的需求。所以我建议你考虑一下你是否想用一种“柔和”的方式来重定向到一个警告页面。

我对你的意图有点迷茫。是否要阻止来自未经身份验证或错误角色用户的未经授权的请求?我只想阻止直接请求到操作(当有人在浏览器URL栏中键入“www.mysite.com/controller/action”时)。HttpPostAttribute足以阻止来自浏览器栏的请求;)@Olexander,OP会接受非Ajax帖子吗?@DaveA,是的,他们会接受,你的答案绝对正确,而且,你的解决方案不会导致可能重写现有的jquery
$.get()
$.getJSON()
请求。但是考虑到上面的评论(关于浏览器URL栏),POST请求是@AlexDn想要达到的(看起来是:)。这就是为什么我只留下评论而不是帖子;)@IAMStapper,今天感觉自己被束缚住了。看起来我需要创建我的属性来完成它。除了IsAjaxRequest之外,我还需要检查请求是否是从我的站点(url refferer或类似的东西)完成的。