在 blazor 客户端应用程序上,相当于 jQuery ajax WithCredentials
或 JavaScript credentials: 'include'
的等效项是什么?
使用 Javascript 我可以说:
fetch('https://www.example.com/api/test', {
credentials: 'include'
});
其中在发出请求时包含身份验证 cookie,服务器响应 200。我正在尝试使用 HttpClient
与 Blazor 编写相同的内容。
最佳答案
您不能再在 Startup 文件中设置 WebAssemblyHttpMessageHandler.DefaultCredentials = FetchCredentialsOption.Include;
来实现 js 的 credentials: 'include'
要在较新版本的 blazor 中实现此目的,您需要创建一个从 DelegatingHandler
派生的类,重写 SendAsync
方法并设置 BrowserRequestCredentials
对于请求
到BrowserRequestCredentials.Include
public class CookieHandler : DelegatingHandler
{
public CookieHandler()
{
InnerHandler = new HttpClientHandler();
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
request.SetBrowserRequestCredentials(BrowserRequestCredentials.Include);
return base.SendAsync(request, cancellationToken);
}
}
将您的 CookieHandler
传递给 HttpClient
builder.Services.AddScoped(sp => new HttpClient(new CookieHandler()) { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
关于asp.net-core - 从 Blazor 发出 CORS 请求时如何包含凭据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57303120/