我的基于 ASP.NET Core 2.1 的 MVC(客戶端)應用程式使用 webapi。
客戶端應用網址:
但是回應頭中的 cookie,沒有存盤在瀏覽器 cookie 存盤中

我缺少什么?如何在客戶端應用程式瀏覽器中設定從 webapi 應用程式接收的 cookie?
在包含在管道代碼下方的 Startup.cs 上,
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddDefaultPolicy(
builder =>
{
builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
});
});
// Add framework services.
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=LandingPage}/{id?}");
});
}
uj5u.com熱心網友回復:
根據你的代碼和描述,我發現你嘗試使用MVC控制器方法呼叫web api,api回傳set-cookie頭。
在這個動作中,MVC 控制器是客戶端,web api 是服務器,服務器將 set-cookie 頭回傳給 MVC 客戶端。這部分是對的。
但是 MVC 控制器不會自動將這個設定的 cookie 回傳給瀏覽器客戶端,因為 MVC 是服務器并且您沒有任何代碼來添加 set-cookie 標頭。
如果您想將 cookie 設定到客戶端,我建議您可以將代碼添加到 MVC 控制器而不是 web api 控制器中,因為 MVC 控制器可以將 cookie 添加到客戶端瀏覽器而不是 web api。
更多細節,您可以參考以下代碼:
[Microsoft.AspNetCore.Cors.EnableCors]
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> ShowOrdersAsync(string parameter)
{
var response = await serviceClient.GetOrdersFromBackendAsync(parameter);
HttpContext.Response.Cookies.Append(
"cookieKey",
"cookieValue",
new Microsoft.AspNetCore.Http.CookieOptions { IsEssential = true }
);
return Ok(response);
}
根據您的描述,您可以先讀取cookie,然后將其添加到MVC控制器回應中。
更多細節,您可以參考以下代碼:
public IActionResult Index()
{
HttpClient httpClient = new HttpClient();
var re = httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://localhost:44387/WeatherForecast")).Result;
var Cookies = ExtractCookiesFromResponse(re);
foreach (var item in Cookies)
{
HttpContext.Response.Cookies.Append(
item.Key,
item.Value,
new Microsoft.AspNetCore.Http.CookieOptions { IsEssential = true });
}
return View();
}
public static IDictionary<string, string> ExtractCookiesFromResponse(HttpResponseMessage response)
{
IDictionary<string, string> result = new Dictionary<string, string>();
IEnumerable<string> values;
if (response.Headers.TryGetValues("Set-Cookie", out values))
{
Microsoft.Net.Http.Headers.SetCookieHeaderValue.ParseList(values.ToList()).ToList().ForEach(cookie =>
{
result.Add(cookie.Name.Value, cookie.Value.Value);
});
}
return result;
}
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/375792.html
