我正在编写一个aspnet核心1应用程序.使用承载令牌认证我在控制器内具有正确标识的User属性.但是我似乎找不到像使用ClaimPrincipal.Current静态之前那样抓住身份的方法.目前最好的做法是将这些数据放在BL层中而不传递ClaimPrincipal对象?
Eug*_*vin 25
进一步研究这个问题我发现有可能使用本机DI容器注入ClaimsPrincipal所需的地方:
services.AddTransient<ClaimsPrincipal>(s =>
s.GetService<IHttpContextAccessor>().HttpContext.User);
Run Code Online (Sandbox Code Playgroud)
这种感觉有点奇怪,但它比将它存放在它中更好CallContext.
小智 8
对于dotnet core 2.0和更高版本,这里是更好的答案:https : //adamstorr.azurewebsites.net/blog/are-you-registering-ihttpcontextaccessor-正确地
基本上将IHttpContextAccessor作为Singleton添加到服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddHttpContextAccessor();
}
Run Code Online (Sandbox Code Playgroud)
要将IHttpContextAccessor注入到您的类中:
public class YourService : IYourService {
private readonly IHttpContextAccessor _httpContextAccessor;
public YourService(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
}
Run Code Online (Sandbox Code Playgroud)
并在您的方法中访问_httpContextAccessor.HttpContext。
| 归档时间: |
|
| 查看次数: |
5916 次 |
| 最近记录: |