ASP.NET 零会话管理

ASP.NET Zero Session Management

我对 ASP.NET Core 和 DDD(领域驱动设计)完全陌生。我最近购买了 ASP.NET Zero 启动模板,以减轻入门的痛苦和学习曲线。我喜欢这个项目,但我在会话状态方面遇到困难。

我在我们的应用程序中使用第三方组件,例如 Neodynamic products

我需要一种方法将当前会话 ID 和协议从它们各自的控制器传递给其中的几个组件。在 ASP.NET MVC 中,使用 HttpContext.Session.IdHttpContext.Request.Scheme 相对容易。这在 ASP.NET Core 中似乎有点混乱。

有人可以帮助我入门吗?

UserManager class 为您提供当前用户的信息。

示例:

 public async Task<string> GetCurrentUserName()
 {
      var user = await UserManager.FindByIdAsync(AbpSession.GetUserId().ToString());
      return user.UserName;
 }

IAbpSession AbpSession 还可以为您提供有用的信息,您可以通过继承 ApplicationService 摘要 class 使用这些信息。 Interface IAbpSession 定义在 Abp.dll.

在所需的 class 中插入 IAbpSessionUserManager 以获取信息。

public class TestClass
{
    private readonly IAbpSession _abpSession;
    private readonly UserManager _userManager;

    public TestClass(
        IAbpSession abpSession,
        UserManager userManager)
    {
        _abpSession = abpSession;
        _userManager = userManager;
    }
}

Microsoft.AspNetCore.Session 包提供了用于管理会话状态的中间件。

在您的 Startup class:

中调用 AddSession()UseSession()
public class Startup
{
    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        // Adds a default in-memory implementation of IDistributedCache.
        services.AddDistributedMemoryCache();

        services.AddSession();

        // ...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // ...

        app.UseSession();

        app.UseMvc(...);
    }
}

参考:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state