从 Blazor 发出 CORS 请求时如何包含凭据?

Posted

技术标签:

【中文标题】从 Blazor 发出 CORS 请求时如何包含凭据?【英文标题】:How to include credentials when making CORS requests from Blazor? 【发布时间】:2019-12-09 16:52:00 【问题描述】:

在 blazor 客户端应用程序上,jQuery ajax WithCredentialsjavascript credentials: 'include' 的等价物是什么?

使用 Javascript 我可以说:

fetch('https://www.example.com/api/test', 
   credentials: 'include'
);

在发出请求时包括身份验证 cookie,服务器响应 200。我正在尝试使用 HttpClient 与 Blazor 编写相同的内容。

【问题讨论】:

阅读:docs.microsoft.com/en-us/aspnet/core/blazor/… 看起来手动构建HttpRequestMessage 是唯一的选择?我计划在验证基本场景后使用AutoRest 生成的 REST 客户端。 【参考方案1】:

在您的 Startup.Configure 方法中,您可以将 WebAssemblyHttpMessageHandler.DefaultCredentials 设置为出站 HTTP 请求的“凭据”选项的所需值,如下所示:

public void Configure(IComponentsApplicationBuilder app)
        
            if (RuntimeInformation.IsOSPlatform(OSPlatform.Create("WEBASSEMBLY")))
            

                WebAssemblyHttpMessageHandler.DefaultCredentials = FetchCredentialsOption.Include;
            

            app.AddComponent<App>("app");
        

参考资料: https://github.com/aspnet/AspNetCore/blob/c39fbb8f12002f61df6c093b0c11e6bd585ee202/src/Components/Blazor/Blazor/src/Http/WebAssemblyHttpMessageHandler.cs

https://github.com/aspnet/AspNetCore/blob/5a70f5312fb57fc3788e5af56a99e7b43761e195/src/Components/Blazor/Blazor/src/Http/FetchCredentialsOption.cs

https://github.com/aspnet/AspNetCore/blob/d18a033b1ee6d923a72d440718c5d496b57c2ffc/src/Components/test/testassets/BasicTestApp/Startup.cs

希望这会有所帮助...

【讨论】:

哇!只是工作!不太确定这是否是推荐的方式。我得检查一下? 我也不确定...:)。但这正是 Blazor 团队使用的代码。 这似乎在 Preview3 中不起作用,但对 Preview4 进行了修复:github.com/aspnet/AspNetCore/issues/17115

以上是关于从 Blazor 发出 CORS 请求时如何包含凭据?的主要内容,如果未能解决你的问题,请参考以下文章

Cors Policy 问题 Blazor WASM、Web API 和 Identity Server 4 和 IIS

发出 POST 请求时如何防止触发 CORS? [复制]

发出多个 Axios 请求导致 CORS 错误

从我的本地主机客户端发出请求而没有 cors 错误

如何使用授权标头发出 GET CORS 请求

CORS 策略已阻止访问 fetch - Blazor 客户端 Web 程序集