2013-03-06 71 views
2

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

我的意思是一个非Ajax请求来执行它将被重定向到404或抛出错误。 Action只会返回正确的结果,如果请求是由JS在我自己的页面上进行的。

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

谢谢。

+0

我对你的意图有点失落。你想阻止来自未经身份验证或错误角色用户的未授权请求吗? – 2013-03-06 20:25:18

+0

我只想阻止直接的请求动作(当有人在浏览器URL栏中输入“www.mysite.com/controller/action”时)。 – 2013-03-06 20:27:38

+2

HttpPostAttribute足以阻止浏览器栏;) – Olexander 2013-03-06 20:39:27

回答

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,但一如既往,只有开发人员了解他们的要求。所以我建议你考虑一下,如果你想以一种“更温和”的方式来重定向到警告页面。

+0

嘿今天快速配对你。 – IamStalker 2013-03-06 21:08:08

+0

@IamStalker,感觉今天划成 – 2013-03-06 21:09:21

+1

好好好好!也许我会更快下一次 – IamStalker 2013-03-06 21:10:31