访问上下文的Session属性会引发异常,因为会话未配置。在ASP.NET Core 1.0中检查会话
如何检测会话是否可用,如果它可以打开或关闭取决于配置。
换句话说,我不能做到这一点:context.Session?.Clear();
访问上下文的Session属性会引发异常,因为会话未配置。在ASP.NET Core 1.0中检查会话
如何检测会话是否可用,如果它可以打开或关闭取决于配置。
换句话说,我不能做到这一点:context.Session?.Clear();
我认为最安全和最高效的方式是使用request features。例如,这里有一个简单的扩展方法来获取会话或空,如果它未启用:从MVC控制器
public static ISession SafeSession(this HttpContext httpContext)
{
var sessionFeature = httpContext.Features.Get<ISessionFeature>();
return sessionFeature == null ? null : httpContext.Session;
}
用法示例:
var session = this.HttpContext.SafeSession();
哈克的解决办法,但可能足以让你继续工作,直到一个更好的解决方案中找到。
public class Startup
{
public static bool IsSessionAvailable { get; set; }
//...
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
IsSessionAvailable = false; // session not available
//...
然后在你的控制器中。
if (Startup.IsSessionAvailable)
{
HttpContext.Session.Clear();
}
你没有运行'services.UseSession()'基于配置? – DavidG
我假设你试图建议直接从配置中获取它..老实说,配置不是我真正拥有的东西......我只是说配置来解释会话是可选的......实际上原因有点儿不同的...会话可以稍后使用..但代码应该现在已经考虑它。 – Maxim