是否有任何方法可以全局应用Microsoft.AspNetCore.Components.WebAssembly.Http扩展方法SetBrowserRequestCredentials(BrowserRequestCredentials.Include(,而不必对每个单独的请求都这样做?
我想避免在每次通话中都这样做:
var request = new HttpRequestMessage(HttpMethod.Get, uri)
.SetBrowserRequestCredentials(BrowserRequestCredentials.Include);
var response = await httpClient.SendAsync(request);
并简单地拥有这样的东西:
var response = await httpClient.GetAsync(uri);
如果你不介意请求不是不可变的,你总是可以创建一个扩展方法:
private static Task<HttpResponseMessage> SendAuthorisedAsync(this HttpClient client, HttpRequestMessage message)
{
return client.SendAsync(message.SetBrowserRequestCredentials(BrowserRequestCredentials.Include));
}
发现这是.NET6中的一个简单解决方案。
builder.Services.AddHttpClient(Options.DefaultName, client =>
{
// setup client
}).AddHttpMessageHandler<CredentialsMessageHandler>();
使用以下中间件:
public class CredentialsMessageHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include);
return base.SendAsync(request, cancellationToken);
}
}