Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于特定角色授权mvc4控制器_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 基于特定角色授权mvc4控制器

C# 基于特定角色授权mvc4控制器,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我有一个名为“Add”的控制器,我只想授权管理员角色,我将角色存储在枚举角色中 public enum Role { Member = 0, Administrator = 100 } 没有指定角色,控制器是被授权的,但当我尝试这样应用角色时 [Authorize(Roles = Role.Administrator.ToString())] public class AddController : Controller { } 尝试构建解决方案时,它给了我一个错误 E

我有一个名为“Add”的控制器,我只想授权管理员角色,我将角色存储在
枚举角色中

public enum Role { 
     Member = 0,
     Administrator = 100
}
没有指定角色,控制器是被授权的,但当我尝试这样应用角色时

[Authorize(Roles = Role.Administrator.ToString())]
public class AddController : Controller
{
}
尝试构建解决方案时,它给了我一个错误

Error   1   An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type  C:\Users\Admin\Desktop\Direct-Edited\Deor.Direct\src\Direct.Web\Controllers\AddController.cs    11  23  Direct.Web

您需要像这样给定值,它将采用常量或字符串值

[Authorize(Roles = "AdminRole")] //String value here
public class AddController : Controller
{
}

第二种选择是检查基本控制器中的请求,如果是添加控制器,则仅当角色是所需角色时才允许。属性的参数必须是常量。最简单的方法是使用硬编码值

[Authorize(Roles = "Administrator")]
另一个选项是在静态类中定义角色

public static class AppRoles
{
   public const string AdminRole = "Administrator";
}
然后在你的控制器里

[Authorize(Roles = AppRoles.AdminRole)]

我已经试过了,但是当这个控制器调用时,它总是再次重定向到登录页面。这是当用户点击那个控制器并且他们没有所需角色时的默认行为。你确定你正在测试的用户具有正确的角色吗?我已经尝试过这个,但是当这个控制器调用时,总是再次重定向到登录页面。如果角色是admin角色??,其他人肯定会被重定向,因为他们不会被授权。是的。如果角色是admin,那么它也会重定向到登录页面