1

目标

获取数据注释的参数值。

问题

我不知道语法。

场景

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

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

我的应用程序中有以下方法:

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

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

知识聚光灯

AuthorizeCore是在实现的类PermissionFiltersAuthorizeAttribute。换句话说,我重写了属性的AuthorizeCore方法Authorize来创建一个新的(PermissionFilters 属性)。

4

1 回答 1

3

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

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

        return attributes[0].Roles;
    }

基本上,您需要获取对控制器类型的引用,然后从中获取对控制器上方法的引用。一旦你有了它,在 MethodInfo 对象的表单中,你可以使用 GetCustomAttributes 来获取应用到你的方法的所有自定义属性或特定类型的所有自定义属性。拥有属性实例后,您可以检查 Roles 属性。

正如我所提到的,上面的示例是一个非常快速而肮脏的演示,展示了如何获取特定方法的属性实例。您可能需要对其进行定制以适应您的特定场景。

于 2013-08-21T18:37:17.463 回答