C# 在ASP.NET Core 3.1中创建会话

C# 在ASP.NET Core 3.1中创建会话,c#,asp.net-core,session,.net-core,C#,Asp.net Core,Session,.net Core,我正在使用ASP.NET Core 3.1。 我需要在控制器中的操作内设置会话。我已将会话添加到ConfigureServices()方法中,如下所示: services.AddSession(options => { options.IdleTimeout = System.TimeSpan.FromSeconds(3600); }); app.UseSession(); 此外,我还添加了在Configure()方法中使用会话的

我正在使用ASP.NET Core 3.1。 我需要在控制器中的操作内设置会话。我已将会话添加到ConfigureServices()方法中,如下所示:

services.AddSession(options => {
                options.IdleTimeout = System.TimeSpan.FromSeconds(3600);
            });
app.UseSession();
此外,我还添加了在Configure()方法中使用会话的代码,如下所示:

services.AddSession(options => {
                options.IdleTimeout = System.TimeSpan.FromSeconds(3600);
            });
app.UseSession();
在控制器类中,我试图创建一个会话

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

GetString
/
SetString
仍然存在于.NET Core 3.1中。它们是扩展(一直以来都是),位于
Microsoft.AspNetCore.Http
命名空间中。也许您只需要使用添加一个

您在这里没有提供大量关于您的情况的信息,但是您可能正在类库中执行此操作。在这种情况下,事情变得有点棘手。ASP.NET Core 3.X迁移到对大部分ASP.NET核心代码使用框架引用(而不是对
Microsoft.AspNetCore.App
metapackage的包引用。但是,该框架引用只能在针对
netcoreapp3.0
或更高版本时使用。如果您针对的是.NET标准,则只能参考旧的2.X包

如果您只支持ASP.NET Core 3.X应用程序,那么您只需将类库的目标更改为
netcoreapp3.1
,并添加框架引用。如果您还需要支持ASP.NET Core 2.X应用程序,那么您必须将类库的多个目标同时设置为
netcoreapp3.1
netstandard2.0
,并且在项目文件中添加条件,根据目标添加框架引用或单个2.X包。Andrew Lock提供了一个优秀的指南和更多信息,网址为:

还值得一提的是,
System.Text.Json
支持直接序列化到/from
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);
    }
}
公共静态类SessionExtensions
{
公共静态无效集(此ISession会话,字符串键,T值)
{
Set(key,JsonSerializer.SerializeToUtf8Bytes(value));
}
公共静态T Get(此ISession会话,字符串键)
{
var值=session.Get(键);
返回值==null?默认值(T):
反序列化(值);
}
}

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

步骤1:在ConfigureServices方法中添加会话

public void ConfigureServices(IServiceCollection services)
    {
        services.AddSession();
    }
步骤2:在配置方法中使用会话

 app.UseSession();
步骤3:在控制器类中添加名称空间

using Microsoft.AspNetCore.Http;
步骤4:现在SetString/GetString方法可用于HttpContext.Session

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

如果您需要字符串,请使用
HttpContext.Session.SetString()
并添加对
Microsoft.AspNetCore.Http;