【问题标题】:Check for session in ASP.NET Core 1.0检查 ASP.NET Core 1.0 中的会话
【发布时间】:2017-07-09 18:18:26
【问题描述】:

访问上下文的 Session 属性引发异常,因为未配置会话。

如何根据配置检测 Session 是否可用,是否可以打开或关闭。

换句话说,我不能这样做:context.Session?.Clear();

【问题讨论】:

  • 你不是根据配置运行services.UseSession()吗?
  • 我假设您尝试建议直接从配置中获取它。说实话,配置不是我真正拥有的东西...我刚刚谈到配置是为了解释 Session 是可选的.. .实际上原因有点不同...会话可以稍后使用..但是代码现在应该已经考虑了。

标签: c# session asp.net-core


【解决方案1】:

我认为最安全和最有效的方法是使用request features。例如,这里有一个简单的扩展方法来获取会话,如果未启用,则为 null:

public static ISession SafeSession(this HttpContext httpContext)
{
    var sessionFeature = httpContext.Features.Get<ISessionFeature>();
    return sessionFeature == null ? null : httpContext.Session;
}

来自 MVC 控制器的示例用法:

var session = this.HttpContext.SafeSession();

【讨论】:

  • 是的,我同意.. 至少这是我现在想要做的.. )) 我认为你是对的,我们可以接受这个答案。另外我认为您可以将其更新为“this.HttpContext”以澄清它是实例(即使语法突出显示也认为错误)。
  • 好吧,我假设此方法位于控制器中,甚至可能位于基控制器类中,以便轻松访问所有这些方法。事实上,它可能作为扩展方法效果更好......
【解决方案2】:

一个 hacky 解决方法,但可能足以让您继续工作,直到找到更好的解决方案。

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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    相关资源
    最近更新 更多