Я пытаюсь установить cookie после выполнения действия, изо всех сил пытаясь заставить это работать. Мне удалось увидеть cookie, если я установил его с контроллера, но не из промежуточного программного обеспечения.
Я играл с порядком конфигурации и ничего.
Пример кода взят из чистого проекта, созданного webapi, поэтому, если кто-то захочет поиграть с ним, просто, просто создайте пустой webapi, добавьте класс CookieSet и замените класс Startup на приведенный ниже (добавлены только параметры политики cookie)
Вот мое промежуточное ПО
public class CookieSet
{
private readonly RequestDelegate _next;
public CookieSet(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
await _next.Invoke(context);
var cookieOptions = new CookieOptions()
{
Path = "/",
Expires = DateTimeOffset.UtcNow.AddHours(1),
IsEssential = true,
HttpOnly = false,
Secure = false,
};
context.Response.Cookies.Append("test", "cookie", cookieOptions);
var p = 1;
p++;
}
}
Я добавил назначение p и проверил, что выполнение никогда не выполняется, в строке Cookies.Append это останавливает выполнение, поэтому происходит что-то, что я не могу понять.
А вот и мой класс Startup
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
options.HttpOnly = HttpOnlyPolicy.None;
options.Secure = CookieSecurePolicy.None;
// you can add more options here and they will be applied to all cookies (middleware and manually created cookies)
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCookiePolicy(new CookiePolicyOptions
{
CheckConsentNeeded = c => false,
HttpOnly = HttpOnlyPolicy.None,
Secure = CookieSecurePolicy.None,
MinimumSameSitePolicy = SameSiteMode.None,
});
app.UseMiddleware<CookieSet>();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
}
Я установил все параметры с минимальными требованиями, протестирован с Chrome и Fiddler и ничего.