是否可以将方法参数传递给该方法的属性?

时间:2011-10-04 18:22:02

标签: asp.net asp.net-mvc custom-attributes

我想制作一个自定义的AuthorizeAttribute类,如下所述:Override Authorize Attribute in ASP.NET MVC

诀窍是,用户是否获得授权不仅取决于他正在执行的方法,还取决于参数:

[MyCustomAuthorize(id)]
[HttpGet]
public ActionResult File(Guid id)
{

}

基本上,用户将被授权查看一些文件,而不是其他文件,因此我想将id传递给我的自定义authorize属性。但我似乎无法这样做,因为名称'id'不在范围内。

我知道我可以做一些逻辑来确保用户在方法开始时可以访问该文件,但我有几种方法都需要这样做,如果我能做到这一点会更加清晰作为[授权]属性的一部分。

2 个答案:

答案 0 :(得分:1)

不,这不合法C#。

但是,您可以访问RouteValues子类型中的AuthorizeAttribute

在内部,例如OnAuthorization,你可以这样做:

object id = filterContext.RouteData.Values["id"];
但是,要小心。你真的需要知道你在这做什么。身份验证,授权和缓存之间的交互很复杂。

答案 1 :(得分:-3)

也许2011年的最后一个答案对于那个版本是正确的,但有可能。创建一个public int(或者你需要的任何东西)并使用它。例如:

public class RestrictToTemplateManagers : AuthorizeAttribute
{
    public string GUID { get; set; }
}

[RestrictToTemplateManagers(GUID="ABC")]
public class ImportTemplatesController : Controller
{

}