Blazor服务器端:如何在服务类中使用ClaimsPrincipal

时间:2020-05-14 14:08:44

标签: blazor-server-side

我对具有以下用户名的数据库进行一些选择:

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?

2 个答案:

答案 0 :(得分:1)

我现在发现了这个: Blazor IHttpContextAccessor在IIS服务器上不工作#14878 https://github.com/dotnet/aspnetcore/issues/14878

我认为我必须用另一种方式做

答案 1 :(得分:0)

您是否尝试将HttpContextAccessor注入服务?

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

  services.AddHttpContextAccessor();