【发布时间】:2021-11-22 07:38:24
【问题描述】:
这是我的第一个 ASP.NET Core 身份验证和授权项目,当我尝试将 Enum 传递给 [Authorize] 属性时出现此错误:
错误 CS1503 参数 1:无法从 'BasicAuthAPI.Entities.Role' 到 '字符串'
这是我的控制器方法,它给出了这个错误:
[Authorize(Role.Admin)]
[HttpGet]
public IActionResult GetAll()
{
var users = _userService.GetAll();
return Ok(users);
}
角色枚举:
public enum Role
{
Admin,
User
}
用户实体:
public class User
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Username { get; set; }
public Role Role { get; set; }
[JsonIgnore]
public string PasswordHash { get; set; }
}
还有我在控制器中提到的_userService:
public class UserService : IUserService
{
private DataContext _context;
private IJwtUtils _jwtUtils;
private readonly AppSettings _appSettings;
public UserService(
DataContext context,
IJwtUtils jwtUtils,
IOptions<AppSettings> appSettings)
{
_context = context;
_jwtUtils = jwtUtils;
_appSettings = appSettings.Value;
}
public AuthenticateResponse Authenticate(AuthenticateRequest model)
{
var user = _context.Users.SingleOrDefault(x => x.Username == model.Username);
// validate
if (user == null || !BCryptNet.Verify(model.Password, user.PasswordHash))
throw new AppException("Username or password is incorrect");
// authentication successful so generate jwt token
var jwtToken = _jwtUtils.GenerateJwtToken(user);
return new AuthenticateResponse(user, jwtToken);
}
public IEnumerable<User> GetAll()
{
return _context.Users;
}
public User GetById(int id)
{
var user = _context.Users.Find(id);
if (user == null) throw new KeyNotFoundException("User not found");
return user;
}
}
如何将管理员角色传递给 [Authorize] 属性?
【问题讨论】:
-
您打算将其作为角色传递给授权属性还是作为授权策略名称?当前期望您传递的是授权策略名称。
标签: c# asp.net asp.net-core authentication asp.net-identity