6

我的网站允许人们编辑帖子。我希望人们只编辑他们的帖子。我想要一个授权属性,如:基于路由参数的ASP.NET MVC授权

[CanEditPost(PostId = Id)] 
ActionResult Edit(int Id) { } 

但它似乎参数属性必须是静态的,这使得这是不可能的。有什么办法可以解决这个问题吗?

回答

9

是的。

如果您创建一个从AuthorizeAttribute继承属性,

你应该能够访问路径参数:

protected override bool AuthorizeCore(HttpContextBase httpContext) 
{ 
    var postId = httpContext.Request.RequestContext.RouteData.Values["Id"]; 
    . 
    . 
    . 
} 
+2

不是我应该重写'AuthorizeCore'? – Xodarap 2011-03-07 19:52:09

+0

@CD:所以我必须依赖命名约定?或者通过财产的名称? – Xodarap 2011-03-07 20:01:49

+0

@ Xodarap:是的,我想不出任何其他选择,路线如何工作,不是吗? – 2011-03-07 20:05:00