ASP.Net MVC:如何通过owin中间件处理会话开始和结束

时间:2016-03-24 08:13:25

标签: asp.net-mvc owin-middleware

这是会话开始和结束的示例代码。

public void Session_OnStart()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] + 1;
  Application.UnLock();
}

public void Session_OnEnd()
{
  Application.Lock();
  Application["UsersOnline"] = (int)Application["UsersOnline"] - 1;
  Application.UnLock();
}
从MVC6

将没有global.asax文件。所以如何处理会话开始和结束由owin中间件。如果可能,请与代码示例讨论。感谢

1 个答案:

答案 0 :(得分:0)

在.NET Core 1.0中复制您想要做的事情将非常困难。 SessionStartSessionEnd事件不存在(并且没有计划引入它们),您只能尝试使用一些技巧“复制”它们。 正如在这篇非常明确的文章中明确指出here

  

由于ASP.NET Core 1.0背后的驱动力之一是“云就绪”,因此对会话管理设计的关注一直是使其在分布式场景中运行。 Session_End仅在使用inproc模式(本地服务器内存)的会话时发出,并且团队声明他们不会添加仅在本地工作的功能。

BTW,关于会话使用的简短回答:

设置

将以下条目添加到project.json文件

的依赖项节点
"Microsoft.AspNet.Session": "1.0.0-rc1-final"

修改您的ConfigureServices以激活会话:

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();

    services.AddSession(options => { 
            options.IdleTimeout = TimeSpan.FromMinutes(30); 
            options.CookieName = ".MyApplication";
        });
}

然后你可以像这样激活它:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseSession();
    //removed for brevity
}

用法

HttpContext.Session.SetString("Name, "Foo");
HttpContext.Session.SetInt32("Age", 35);

var name = HttpContext.Session.GetString("Name");
var age = HttpContext.Session.GetInt32("Age");