asp.net-core - 从 Blazor 发出 CORS 请求时如何包含凭据?

标签 asp.net-core cors blazor

在 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/

相关文章:

Apache 2.4 跨域

ruby-on-rails - Apache 如何以及为何拦截对 Rails 的一些 CORS 请求?

asp.net-core - 从 JS 到 .Net 的 InvokeUnmarshalled 相当于什么?

entity-framework-core - 优先使用数据库的 Blazor

c# - ASP.NET Core 返回带有状态码的 JSON

c# - 读取中间件.Net Core中的Controller和Action名称

javascript - CORS "No ' Access-Control-Allow-Origin' header is present“但有

asp.net-core - 让我们使用 ASP.Net Core 和 Azure 应用服务进行加密

c# - 如何在我的 ASP.NET Core MVC 应用程序中记录来自类库的 NLog 调用?

blazor - 无法覆盖客户端blazor中的OnAfterRenderAsync