【发布时间】:2017-04-27 19:31:00
【问题描述】:
我在日志中看到了这个错误,但我不知道如何重现它。它不会定期发生。
异常消息:响应开始后无法建立会话。 堆栈跟踪:
在 Microsoft.AspNetCore.Session.DistributedSession.Set(String key, Byte[] value)
CustomMiddleware.cs:
public async Task Invoke(HttpContext context, AlertWriter alertWriter, AlertReader alertReader)
{
var sessionAlerts = context.Session.GetString(AlertKey);
if (!string.IsNullOrWhiteSpace(sessionAlerts))
{
var alerts = JsonConvert.DeserializeObject<List<Alert>>(sessionAlerts);
alertReader.Initialize(alerts);
context.Session.Remove(AlertKey);
}
await _next.Invoke(context);
if (context.Response.StatusCode >= 300 && context.Response.StatusCode < 400)
{
alertWriter.Alerts = alertWriter.Alerts.Union(alertReader).ToList();
}
var serializedAlerts = JsonConvert.SerializeObject(alertWriter.Alerts);
//ERROR IS HERE
context.Session.SetString(AlertKey, serializedAlerts);
}
在 Startup.cs 中,app.UseSession(); 是我调用的第一个应用程序。使用...。
Documentation 表示如果您“在您已经开始写入响应流之后尝试创建新会话(即尚未创建会话 cookie)”,则会发生此错误。
如何避免此错误?似乎如果我尝试在任何自定义中间件中访问会话,我将不得不检查 .AspNetCore.Session cookie 是否存在?
【问题讨论】:
标签: c# session asp.net-core asp.net-core-mvc