我对具有以下用户名的数据库进行一些选择:
private readonly ClaimsPrincipal _User;
public PrinterService(IHttpContextAccessor httpContextAccessor)
{
if (httpContextAccessor.HttpContext != null)
_User = httpContextAccessor.HttpContext.User;
}
public Task<PrinterLabel> GetDefaultPrinterLabelsAsync()
{
PrinterLabel printerLabel = new PrinterLabel();
if (_User != null)
{
using (var db = new SQLiteDBContext())
{
var uPL = db.UserPrinterLabel.Include(p => p.PrinterLabel).Where(u => u.UserId == _User.Identity.Name).FirstOrDefault();
if (uPL != null)
printerLabel = uPL.PrinterLabel;
}
if (printerLabel != null)
{
return Task.FromResult(printerLabel);
}
else
{
return null;
}
}
else
{
return null;
}
}
当我使用Visual Studio运行它时,一切正常。但是当我将其部署到IIS时。未将httpContextAccessor设置为实例。
我读到一些我不应该使用IHttpContextAccessor的东西。但是,如何在不使用IHttpContextAccessor的情况下使用ClaimsPrincipal?
答案 0 :(得分:1)
我现在发现了这个: Blazor IHttpContextAccessor在IIS服务器上不工作#14878 https://github.com/dotnet/aspnetcore/issues/14878
我认为我必须用另一种方式做
答案 1 :(得分:0)
您是否尝试将HttpContextAccessor注入服务?
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
或
services.AddHttpContextAccessor();