我在使用 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
请帮帮我
答案 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”):