使用类似字符串的枚举点网

时间:2015-10-05 07:57:15

标签: asp.net-mvc enums

所以我有下一个问题。我有一个控制器和一些用户角色。我有[Authorize(Roles="Admin")]时使用字符串,但我想使用这样的枚举,因为如果我更改角色的名称,我将在一个地方修改。 我已经尝试了Roles=UserRoles.Admin.ToString(),其中UserRoles是我的枚举,但我收到了错误。我已经从这里读过aricles,但似乎没有人帮我解决我的问题。

你能帮我解决一下这个建议吗?

2 个答案:

答案 0 :(得分:3)

像这样创建自定义AuthorizeAttribute

using System.Collections.Generic;
using System.Web.Mvc;

namespace MyApp.Whatever
{
    public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        public CustomAuthorizeAttribute(params UserRoles[] userRoles)
        {
            Roles = string.Join(",", userRoles);
        }
    }
}

然后您可以像使用AuthorizeAttribute一样使用它,如下所示:

using System.Web.Mvc;

namespace MyApp.Whatever
{
    [CustomAuthorize(UserRoles.Admin, UserRoles.Whatever)]
    public class MyController : Controller
    {
        ...
    }
}

答案 1 :(得分:1)

这可以做到,但你需要做一些工作。

  • 创建自己的自定义属性,实现IAuthorizationFilter(如AuthorizeAttribute所做的那样)
  • 在构造函数中(或通过属性)接受枚举
  • 将操作转发到包含的AuthorizeAttribute
  • 实例

(整个过滤机制是可扩展的,允许这种事情。)

但是,我过去所做的就是定义一系列传递给属性实例的常量字符串。因此,保持名称的中心。