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

Gen*_*ari 5 asp.net asp.net-mvc custom-attributes

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

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

我知道我可以执行逻辑来确保用户可以在方法开始时访问该文件,但是我有几种方法都需要完成此操作,如果我可以将其作为[授权] 属性。

Cra*_*ntz 1

不,那不是合法的 C#。

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

在内部,例如,OnAuthorization您可以执行以下操作:

object id = filterContext.RouteData.Values["id"];
Run Code Online (Sandbox Code Playgroud)

不过要小心。你真的需要知道你在这里做什么。身份验证、授权和缓存之间的交互非常复杂。