基于Route Params的ASP.NET MVC授权

Xod*_*rap 7 asp.net-mvc forms-authentication asp.net-mvc-routing asp.net-mvc-3

我的网站允许人们编辑帖子.我希望人们只编辑他们的帖子.我想要一个授权属性,如:

[CanEditPost(PostId = Id)]
ActionResult Edit(int Id) { }
Run Code Online (Sandbox Code Playgroud)

但似乎属性的参数必须是静态的,这使得这是不可能的.有没有办法解决这个问题?

CD.*_*D.. 9

是.

如果创建继承自的属性AuthorizeAttribute,

您应该能够通过以下方式访问路由参数:

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
    var postId = httpContext.Request.RequestContext.RouteData.Values["Id"];
    .
    .
    .
}
Run Code Online (Sandbox Code Playgroud)

  • 不是我应该覆盖`AuthorizeCore`? (2认同)
  • 这是错误的,@ Xodarap是对的.@CD,而不是简单地重复最小的MSDN文本,看看MVC源代码,特别是"OnAuthorization"中的注释.`AuthorizeCore`是在这里覆盖的正确位置.但请注意该方法中对线程安全性的评论! (2认同)
  • @CD:据我所知,几乎没有.在MVC 1测试版中,它是唯一的选择,并且在使用缓存时授权被破坏.我想不出今天使用它的好理由. (2认同)