Blazor Web Assembly是一种革命性的Web前端技术。然而,它存在一个问题,那就是它无法从Web API中获取Cookies。这是因为Web Assembly包含在一个webworker中运行,不能像传统JS一样获取cookies。下面是如何解决这个问题:
在Web API中,设置响应头来使浏览器保存cookies,如下所示:
[HttpGet]
[Route("SetCookie")]
public IActionResult SetCookie(string key, string value)
{
Response.Cookies.Append(key, value, new CookieOptions
{
HttpOnly = true,
SameSite = SameSiteMode.Strict
});
return Ok();
}
在Blazor Web Assembly中,使用HttpClient
来获取数据,这需要手动传递cookies,如下所示:
using (HttpClient httpClient = new HttpClient())
{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Add("X-XSRF-TOKEN", xsrfToken);
httpClient.DefaultRequestHeaders.Add("Cookie", $"{key}={value}");
...
}
通过将cookies作为Cookie
请求头传递,就可以获取到Web API的cookies,从而解决了Blazor Web Assembly无法获取cookies的问题。