获取数据注释的参数值

时间:2013-08-21 18:32:34

标签: c# asp.net-mvc-4 data-annotations

目标

获取数据注释的参数值。

问题

我不知道语法。

场景

我的应用程序上有以下控制器:

[PermissionsFilter(Roles = "Administrator")]
public ActionResult Index()
{
    return View();
}

我的申请有以下方法:

protected override bool AuthorizeCore(HttpContextBase httpContext)
{
    return true;
}

我需要的似乎很简单:如何在Administrator方法上获取AuthorizeCore字符串?是通过httpContext参数?

知识聚光灯

AuthorizeCore位于实现PermissionFilters的{​​{1}}类中。换句话说,我正在覆盖AuthorizeAttribute属性AuthorizeCore方法以创建一个新方法(PermissionFilters属性)。

1 个答案:

答案 0 :(得分:2)

您需要使用反射来将属性应用于您的控制器操作。下面是一个快速而肮脏的例子,说明如何做到这一点:

    private string GetPermissionFilerValue()
    {
        object[] attributes = typeof(YourControllerType).GetType().GetMethod("Index").GetCustomAttributes(typeof (PermissionFilterAttribute));

        return attributes[0].Roles;
    }

基本上你需要获得对控制器类型的引用,然后从中获取对控制器上方法的引用。一旦有了这个,就可以使用MethodInfo对象,使用GetCustomAttributes获取应用于您的方法的所有自定义属性或特定类型的所有自定义属性。获得属性实例后,您可以检查角色属性。

正如我所提到的,上面的示例是一个非常快速和肮脏的演示,说明如何获取特定方法的属性实例。您可能需要定制它以适应您的特定情况。