Использование.NET Core Session в промежуточном ПО
Когда я пишу промежуточное программное обеспечение в.NET Core, которое замыкает цепь и возвращает ответ, оно не устанавливает cookie сеанса. Краткий пример:
public class Middleware
{
private RequestDelegate _next;
public Middleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
var req = context.Request;
if (req.Path.ToString() == "/hello-world")
{
context.Response.StatusCode = 200;
context.Response.Headers["Content-Type"] = "text/html; charset=utf-8";
await context.Response.WriteAsync("Hello, world!");
return;
}
await _next(context);
}
}
Вот соответствующий код из моего Startup
учебный класс:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services
.AddDistributedMemoryCache()
.AddSession();
}
public void Configure(IApplicationBuilder app)
{
app
.UseSession()
.UseMiddleware<Middleware>();
}
}
Заголовки ответа при сквозной передаче:
HTTP 200 No Error
Server: Kestrel
Set-Cookie: .AspNetCore.Session=CfDJ8C1XpX5nCrFCnHz%2BDwlF41YjVSyPMqB8Qmk6qcDPnOSpG22yun3hsXpRBgMDhlX%2ByLbqkUtqPRYY%2B1%2Bno5WeRLnabM1zBDggvB4YEg6ooBiGN%2B5ktjjgfp4uH5mmlWZpEQyQJQb0vKDGwqWpMlLEGjMxVIMqOnkqjM0DvsQIPjt6; path=/; samesite=lax; httponly
Content-Type: text/html; charset=utf-8
Pragma: no-cache
Transfer-Encoding: Identity
Date: Thu, 18 Jan 2018 20:48:55 GMT
Expires: -1
Cache-Control: no-cache
Заголовки ответа на короткое замыкание:
HTTP 200 No Error
Transfer-Encoding: Identity
Content-Type: text/html; charset=utf-8
Server: Kestrel
Date: Thu, 18 Jan 2018 21:17:39 GMT
Короче говоря, мне нужно знать, почему промежуточное программное обеспечение сеанса не отправляет cookie обратно. Я также, кажется, получаю некоторые предупреждения сеанса, когда я загружаю страницу о неспособности декодировать куки.
1 ответ
Я ничего не добавил к сеансу, поэтому промежуточное ПО не создавало сеанс. Просто добавь context.Session.SetString("stuff", "3");
(или один из вариантов Set*) для отправки сеанса клиенту. Вы захотите сделать это, прежде чем писать в тело ответа.