添加令牌的 blazor 服务器应用程序身份验证问题

时间:2021-07-27 09:50:29

标签: c# asp.net asp.net-core blazor blazor-server-side

我在使用 blazor 服务器应用程序时遇到问题 我在 startup.cs 中使用 HttpClient,我想在 api 请求之前添加令牌作为标头。

   [Inject]
    public FKSERVICES fKSERVICES { get;  }
public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
        services.AddServerSideBlazor();
        services.AddSingleton<WeatherForecastService>();
        services.AddSingleton<FKSERVICES>();
        services.AddScoped<IAuthenticationService, AuthenticationService>();
        services.AddHttpClient<IHttpService, HttpService>();
        services.AddHttpClient<ILocalStorageService, LocalStorageService>();
        services.AddHttpClient<ICategoryService, CategoryService>(client => {
            client.BaseAddress = new Uri("https://localhost:5001/");
            string tokenVal = fKSERVICES.GetToken();
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", tokenVal);

        });
    }

我尝试了很多方法来做到这一点,但即使我用简单的方法创建新类时,我也总是得到同样的错误同样的错误 这是我创建的 FKSERVICES 服务,用于测试我是否可以从其他类中获得价值

 public class FKSERVICES
{
    public FKSERVICES()
    {
    }
    public string GetToken()
    {
        return "";

    }
}

这是错误 enter image description here

请帮帮我

1 个答案:

答案 0 :(得分:0)

如果在 AddHttpClient 方法中设置断点并检查 fKSERVICES,可以看到它是 Null,因为您没有创建实例或设置值

要获取令牌,您可以修改 AddHttpClient 方法如下:

services.AddHttpClient<ICategoryService, CategoryService>(client =>
{
    #pragma warning disable ASP0000 // Do not call 'IServiceCollection.BuildServiceProvider' in 'ConfigureServices'
    var sp = services.BuildServiceProvider();
    #pragma warning restore ASP0000 // Do not call 'IServiceCollection.BuildServiceProvider' in 'ConfigureServices'
    var kservice = sp.GetRequiredService<FKSERVICES>();
    client.BaseAddress = new Uri("https://localhost:5001/");
    string tokenVal = kservice.GetToken();
    
   // client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("bearer", tokenVal);

});

结果如下(在FKSERVICES.GetToken方法中,我会返回一个字符串:“FKSERVICES Token”):

enter image description here