【发布时间】:2019-12-27 17:14:41
【问题描述】:
我将 Visual Studio 2019 和 .Net Core 3.0.0-preview-7 与标准 Blazor 客户端、服务器和共享模板一起使用。
在应用程序中,我们的服务器端 WebApi 应用程序将始终要求在标头中存在 JWT 令牌以进行授权。
从下面看
Make HTTP requests using IHttpClientFactory in ASP.NET Core
我创建了以下处理程序;
public class JwtTokenHeaderHandler : DelegatingHandler
{
private readonly ILocalStorageService _localStorage;
public JwtTokenHeaderHandler(ILocalStorageService localStorage)
{
_localStorage = localStorage;
}
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken cancellationToken)
{
if (!request.Headers.Contains("bearer"))
{
var savedToken = await _localStorage.GetItemAsync<string>("authToken");
if (!string.IsNullOrWhiteSpace(savedToken))
{
request.Headers.Add("bearer", savedToken);
}
}
return await base.SendAsync(request, cancellationToken);
}
}
我使用Blazored.LocalStorage 从本地存储中获取保存的令牌并将其添加到标题中。
现在,此时我不确定该怎么做,好像我将以下内容添加到Blazor.Client Startup.cs;
services.AddTransient<JwtTokenHeaderHandler>();
services.AddHttpClient("JwtTokenHandler")
.AddHttpMessageHandler<JwtTokenHeaderHandler>();
我收到错误消息;
“IServiceCollection”不包含“AddHttpClient”的定义 并且没有可访问的扩展方法“AddHttpClient”接受第一个 可以找到“IServiceCollection”类型的参数(您是否缺少 using 指令还是程序集引用?)
谁能指导我在这里做错了什么?
【问题讨论】:
-
@HenkHolterman 我说这是在
Blazor.Client项目中?我想将 JWT 添加到我对服务器端控件进行的所有调用的标头中。 -
托管模型/模板是 Blazor 客户端。加上一个“普通”的 Web Api 项目。
-
@Matthew Flynn,你最好调用你的应用客户端 Blazor。
-
@HenkHolterman 好的,所以在“普通”webapi 上我在控制器上有
[Authorize]属性,授权是消息头中的标准“承载”jwt。这工作正常,现在在 blazor 客户端应用程序上,当它调用以获取一些数据等到 WebApi 时,我只想拦截 Post、Get 等并将存储在 localstorage 中的 Jwt 添加到请求的标头中跨度> -
我觉得这个网址对你有帮助docs.microsoft.com/en-us/aspnet/core/blazor/…
标签: c# asp.net-core blazor blazor-client-side