在我的ASP.NET MVC 4控制器类中,我有使用CustomAuthorize
属性修饰的操作,因此访问仅限于某些角色。
我想从动作方法中获取角色,为此我需要使用方法装饰的CustomAuthorize属性。
我该怎么做?
我想要做的示例代码如下:
public class TestController : Controller
{
// Only the users in viewer and admin roles should do this
[CustomAuthorize("viewer", "admin")]
public ActionResult Index()
{
//Need CustomAuthorizeAttribute so I get the associated roles
}
}
CustomAuthorizeAttribute
是System.Web.Mvc.AuthorizeAttribute的子类。
答案 0 :(得分:2)
属性不是每个实例,它们是每个类,因此没有CustomAuthorizeAttribute的“当前”实例。请参阅有关属性的文档。
https://msdn.microsoft.com/en-us/library/z0w1kczw.aspx
如果您需要获取CustomAuthorizeAttribute,可以使用reflection获取有关您所在类的信息,然后提取属性的属性,但我会质疑您需要的原因。是否有您想要的具体内容我们可以提供更多帮助?
答案 1 :(得分:2)
如果你想从该方法获取属性,你可以这样做,例如使用反射:
var atrb = typeof(TestController).GetMethod("Index")
.GetCustomAttributes(typeof(CustomAuthorizeAttribute), true)
.FirstOrDefault() as CustomAuthorizeAttribute;
或当前方法;
var atrbCurrentMethod = System.Reflection.MethodBase.GetCurrentMethod()
.GetCustomAttributes(typeof(CustomAuthorizeAttribute), true)
.FirstOrDefault() as CustomAuthorizeAttribute;
或更灵活的方式,如果您想稍后创建一个功能,如您在评论中所述:
public CustomAuthorizeAttribute GetCustomAuthorizeAttribute() {
return new StackTrace().GetFrame(1).GetMethod()
.GetCustomAttributes(typeof(CustomAuthorizeAttribute), true).FirstOrDefault() as CustomAuthorizeAttribute;
}
答案 2 :(得分:0)
为什么不使用Roles.GetRolesForUser();
方法来获取所有角色用户?这应该与您从Reflection解析属性值得到的结果相同。