ahe*_*ick 8 c# entity-framework-core asp.net-core-mvc asp.net-core
我有一个场景,我需要User.Identity
在我的构造函数的控制器中访问声明.
我需要这个,因为声明有我需要的信息来启动自定义数据库上下文(连接字符串)
我怎么去访问这个?我只是注入DBContext,但基于用户,他们可能需要访问不同的DB.
有没有更好的方式来考虑这个?
[Authorize]
public class DefaultController : Controller
{
public DefaultController()
{
// this is NULL
var authenticatedUser = User.Identity.Name;
}
}
Run Code Online (Sandbox Code Playgroud)
bat*_*ssc 18
从HttpContextAccessor
提供ASP.NET Core的2.1版本开始.为此,我们必须遵循以下步骤:
使用以下ConfigureServices
方法中的标准实现配置服务Startup.cs
:
services.AddHttpContextAccessor();
Run Code Online (Sandbox Code Playgroud)
IHttpContextAccessor
在控制器上执行依赖注入.使用HttpContext
属性进行访问User
[Authorize]
public class DefaultController : Controller
{
public DefaultController(IHttpContextAccessor contextAccessor)
{
// Here HttpContext is not Null :)
var authenticatedUser = contextAccessor.HttpContext.User.Identity.Name;
}
}
Run Code Online (Sandbox Code Playgroud)
This code I using to get the calims\n\n --------\n\n int user_id = 0;\n int Account_id = 0;\n List<string> roles;\n\n public TEMP_CON_Controller(DatabaseContext context,IHttpContextAccessor,httpContextAccessor)\n {\n _context = context;\n if (httpContextAccessor.HttpContext.User.Identity.IsAuthenticated)\n {\n var user = httpContextAccessor.HttpContext.User;\n\n this.user_id = int.Parse(user.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value);\n\n IEnumerable<Claim> claims = user.Claims;\n\n var accId = claims.Where(x => x.Type == "AccountId").Select(c => c.Value).SingleOrDefault();\n\n if (!string.IsNullOrEmpty(accId))\n this.Account_id = Int32.Parse(accId);\n\n roles = claims.Where(x => x.Type == ClaimTypes.Role).Select(c => c.Value).ToList();\n\n\n }\n }\n\xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
6263 次 |
最近记录: |