您可以StickyCookie在中间件中获取响应头,然后将其保存到Session中,然后您可以从会话中检索数据并将其添加到请求头中。
public class AddHeaderMiddleware
{
private readonly RequestDelegate _next;
public AddHeaderMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
var data = context.Session.GetString("StickyCookie");
context.Request.Headers.Add("StickyCookie", data);
context.Response.OnStarting(state =>
{
var httpContext = (HttpContext)state;
var cookies = httpContext.Response.Headers["Set-Cookie"].ToString().Split(";");
if (cookies.Length > 0)
{
foreach (var item in cookies)
{
if (item.Split("=")[0] == "StickyCookie")
{
var cookie = item.Split("=")[1];
httpContext.Session.SetString("StickyCookie", cookie);
}
}
}
return Task.FromResult(0);
}, context);
await _next(context);
}
}
public static class AddHeaderMiddlewareExtensions
{
public static IApplicationBuilder UseAddHeader(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<AddHeaderMiddleware>();
}
}
在 Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
//// Set a short timeout for easy testing.
//options.IdleTimeout = TimeSpan.FromMinutes(10);
//options.Cookie.HttpOnly = true;
//// Make the session cookie essential
options.Cookie.IsEssential = true;
});
}
public void Configure(IApplicationBuilder app)
{
//...
app.UseSession();
app.UseAddHeader();
//...
}
检查动作:
var header = HttpContext.Request.Headers;