【问题标题】:Creating a session in ASP.NET Core 3.1在 ASP.NET Core 3.1 中创建会话
【发布时间】:2020-06-15 00:21:12
【问题描述】:

我使用的是 ASP.NET Core 3.1。 我需要在控制器的动作中设置一个会话。我在 ConfigureServices() 方法中添加了会话:

services.AddSession(options => {
                options.IdleTimeout = System.TimeSpan.FromSeconds(3600);
            });

我还添加了在 Configure() 方法中使用会话的代码:

app.UseSession();

在控制器类中我试图创建一个会话

HttpContext.Session.Set("sessionuser",xxx);

所需的 xxx 是一个字节[],这与 .NET CORE 2.2 中的 SetString() 中所需的字符串不同 如何为此创建字节[]?创建会话还有其他更好的选择吗?

【问题讨论】:

  • How to create the byte[] for this 是什么意思,如果您需要字符串,只需使用HttpContext.Session.SetString() 并添加对Microsoft.AspNetCore.Http; 的引用

标签: c# asp.net-core session .net-core


【解决方案1】:

GetString/SetString 仍然存在于 .NET Core 3.1 中。它们是扩展(一如既往)并且存在于Microsoft.AspNetCore.Http 命名空间中。也许您只需要添加一个using

您没有在这里提供有关您的情况的大量信息,但您可能是从类库中执行此操作的。在这种情况下,事情变得有点棘手。 ASP.NET Core 3.X 转为对大部分 ASP.NET Core 代码使用框架引用(而不是对 Microsoft.AspNetCore.App 元包的包引用。但是,该框架引用只能在定位 netcoreapp3.0 时使用或更高版本。如果您的目标是 .NET Standard,则只能引用旧的 2.X 包。

如果您只支持 ASP.NET Core 3.X 应用程序,那么您只需将类库的目标更改为 netcoreapp3.1 并添加框架引用。如果您还需要支持 ASP.NET Core 2.X 应用程序,那么您必须将您的类库多定位到 netcoreapp3.1netstandard2.0,并在项目文件中使用条件来添加框架引用或单独的 2.X 包,具体取决于目标。 Andrew Lock 提供了出色的指南和更多信息:https://andrewlock.net/converting-a-netstandard-2-library-to-netcore-3/

还值得一提的是System.Text.Json 支持直接与byte[] 进行序列化。因此,如果您已经在使用或打算使用 ISession 的泛型类型扩展来支持比简单字符串更复杂的类型或可以强制转换为字符串的值类型,那么您可以只依赖它:

public static class SessionExtensions
{
    public static void Set<T>(this ISession session, string key, T value)
    {
        session.Set(key, JsonSerializer.SerializeToUtf8Bytes(value));
    }

    public static T Get<T>(this ISession session, string key)
    {
        var value = session.Get(key);

        return value == null ? default(T) : 
            JsonSerializer.Deserialize<T>(value);
    }
}

【讨论】:

    【解决方案2】:

    注意:- 如果您使用的是 Dotnet Core 2.0 或更低版本,那么首先从 Nuget 安装包:Microsoft.AspNetCore.Session

    Step1:在ConfigureServices方法中添加Session

    public void ConfigureServices(IServiceCollection services)
        {
            services.AddSession();
        }
    

    Step2:在Configure方法中使用Session

     app.UseSession();
    

    Step3:在控制器类中添加命名空间

    using Microsoft.AspNetCore.Http;
    

    Step4:现在 SetString / GetString 方法将可用于 HttpContext.Session

       public IActionResult Index()
        {
            HttpContext.Session.SetString("mysession", "mySessionValue");
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 2020-06-18
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      相关资源
      最近更新 更多