我最近将项目从Asp.Net Core 3.0
升级到了最新版本Asp.Net Core 3.1.0 preview 3
。
我的项目在客户端中运行Blazor,我还拦截了管道,以使用扩展了JwtTokenHeaderHandler
的{{1}}向发送回服务器的每个请求的标头添加Jwt。
我将其添加到DelegatingHandler
项目的startup.cs
中,如下所示:
blazor.client
但是,自升级以来, services.AddSingleton<HttpClient>(s =>
{
// Creating the URI helper needs to wait until the JS Runtime is initialized,so defer it.
var uriHelper = s.GetRequiredService<Navigationmanager>();
var myHandler = s.GetRequiredService<JwtTokenHeaderHandler>();
myHandler.InnerHandler = new WebAssemblyHttpMessageHandler();
return new HttpClient(myHandler)
{
BaseAddress = new Uri(uriHelper.BaseUri)
};
});
似乎不再可用?
我找不到有关如何解决此方法的任何文档。
有人可以建议我如何纠正此问题吗?
根据Aqua的答案进行更新
将以下代码添加到我的WebAssemblyHttpMessageHandler()
之后;
Startup.cs
从我的 services.AddTransient(p =>
{
var wasmHttpMessageHandlerType = Assembly.Load("WebAssembly.Net.Http")
.GetType("WebAssembly.Net.Http.HttpClient.WasmHttpMessageHandler");
var constructor = wasmHttpMessageHandlerType.getconstructor(Array.Empty<Type>());
return constructor.Invoke(Array.Empty<object>()) as HttpMessageHandler;
})
.AddTransient<JwtTokenHeaderHandler>();
文件中调用Authorized
获取端点;
.razor
(上面只是使用扩展方法的类型化包装服务响应);
var response = await Http.Getasync<ContactTypeOutputModel[]>("ContactTypes/all");
该服务仍显示401吗?并没有输出日志记录说正在使用该服务?
public static async Task<ServiceResponse<T>> Getasync<T>(
this HttpClient httpClient,string url)
{
var response = await httpClient.Getasync(url);
return await BuildResponse<T>(response);
}
有什么想法为什么没有被实现?