我正在嘗試訪問像這樣的一些自定義授權的角色值string UserRole = ((ClaimsIdentity)User.Identity).FindFirst("RoleId")?.Value;但是它給了我錯誤user does not contain the definition of Identity當我嘗試在另一個類中訪問時它作業正常。誰能告訴我這里缺少什么?
訪問控制屬性.cs
public class AccessControlAttribute : AuthorizeAttribute, IAuthorizationFilter
{
public string Role;
string UserRole = ((ClaimsIdentity)User.Identity).FindFirst("RoleId")?.Value;
public AccessControlAttribute(string Role):base(Role)
{
if (Role == "Admin".ToLower())
{
this.Role = "2";
}
else
this.Role = "1";
// this._role = Role;
}
uj5u.com熱心網友回復:
我猜你在控制器類中,所以它可以作業。
您可以User在控制器
中看到您可以在控制器中看到Identity如下:

User在 AccessControlAttribute 中如下:

從 Controller 基類中,您可以ClaimsPrincipal從 User 屬性中獲取。但是如果你的代碼是一個服務類,你可以使用依賴注入來獲取一個 IHttpContextAccessor,它可以讓你從 HttpContext 中獲取用戶。
1.向服務注冊IHttpContextAccessor
public void ConfigureServices(IServiceCollection services)
{
...
services.AddHttpContextAccessor();
}
2.使用依賴注入來獲取一個IHttpContextAccessor,它可以讓你從HttpContext中獲取用戶。
public class AccessControlAttribute : AuthorizeAttribute, IAuthorizationFilter
{
private readonly IHttpContextAccessor _httpContextAccessor;
public AccessControlAttribute(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public string Role;
public AccessControlAttribute(string Role) : base(Role)
{
var User = _httpContextAccessor.HttpContext.User;
string UserRole = ((ClaimsIdentity)User.Identity).FindFirst("RoleId")?.Value;
if (Role == "Admin".ToLower())
{
this.Role = "2";
}
else
this.Role = "1";
// this._role = Role;
}
public void OnAuthorization(AuthorizationFilterContext context)
{
throw new System.NotImplementedException();//do your staff...
}
}
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/461402.html
