You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Web应用(独立账户)调用API时如何传递Cookie?

解决Blazor Web应用请求API时Cookie未传递的问题

以下是针对你的场景的具体解决步骤:

1. 配置HttpClient的Cookie容器

Blazor默认的HttpClient不会自动管理Cookie,需要手动配置Cookie容器来携带请求Cookie:

方式一:通过IHttpClientFactory注册配置

在Program.cs中注册带有Cookie处理的HttpClient:

builder.Services.AddHttpClient("ApiClient", client =>
{
    client.BaseAddress = new Uri("你的API基础地址");
})
.AddHttpMessageHandler(provider =>
{
    var handler = new HttpClientHandler();
    handler.CookieContainer = new CookieContainer();
    handler.UseCookies = true;
    return handler;
});

在组件中注入IHttpClientFactory并使用该客户端:

private readonly HttpClient _httpClient;

public YourComponent(IHttpClientFactory httpClientFactory)
{
    _httpClient = httpClientFactory.CreateClient("ApiClient");
}

// 请求代码
var response = await _httpClient.GetFromJsonAsync<List<UserDTO>>("api/users");

方式二:手动添加Cookie到请求头

如果需要指定特定Cookie,可以通过HttpRequestMessage手动添加Cookie头:

var request = new HttpRequestMessage(HttpMethod.Get, "api/users");
// 替换为实际的Cookie键值对,多个Cookie用分号分隔
request.Headers.Add("Cookie", "AuthCookie=你的Cookie值; AnotherCookie=另一个值");

var response = await _httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
var users = await response.Content.ReadFromJsonAsync<List<UserDTO>>();
return users;

如果需要从浏览器获取当前Cookie,可通过IJSRuntime读取:

// 注入IJSRuntime
private readonly IJSRuntime _jsRuntime;

// 获取Cookie字符串
var cookieString = await _jsRuntime.InvokeAsync<string>("document.cookie");
// 解析出需要的Cookie(示例:提取AuthCookie的值)
var authCookieValue = cookieString.Split(';')
    .Select(c => c.Trim())
    .FirstOrDefault(c => c.StartsWith("AuthCookie="))?
    .Split('=')[1];

// 添加到请求头
request.Headers.Add("Cookie", $"AuthCookie={authCookieValue}");

2. 配置API端的CORS策略(跨域场景)

如果你的Blazor应用和API不在同一域下,必须确保API的CORS策略允许携带凭证(Cookie):
在API项目的Program.cs中配置:

builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowBlazor", policy =>
    {
        policy.WithOrigins("你的Blazor应用域名") // 如https://localhost:5001
              .AllowAnyHeader()
              .AllowAnyMethod()
              .AllowCredentials(); // 必须启用此选项
    });
});

// 在UseRouting之后、UseAuthorization之前启用CORS
app.UseCors("AllowBlazor");

3. 验证Cookie的域和路径配置

确保身份验证生成的Cookie的Domain和Path与API的地址匹配:

  • Cookie的Domain需包含API的域名(如.yourdomain.com可匹配子域)
  • Path需设置为/或API的根路径,确保API能接收到该Cookie

内容的提问来源于stack exchange,提问作者Francisco Fernandes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:58:26