sm1*_*101 3 c# session .net-core asp.net-core
我正在使用 ASP.NET Core 3.1。我需要在控制器的操作中设置会话。我在 ConfigureServices() 方法中添加了会话:
services.AddSession(options => {
options.IdleTimeout = System.TimeSpan.FromSeconds(3600);
});
Run Code Online (Sandbox Code Playgroud)
我还添加了在 Configure() 方法中使用 session 的代码:
app.UseSession();
Run Code Online (Sandbox Code Playgroud)
在控制器类中,我试图创建一个会话
HttpContext.Session.Set("sessionuser",xxx);
Run Code Online (Sandbox Code Playgroud)
所需的 xxx 是一个 byte[],与 .NET CORE 2.2 中 SetString() 所需的字符串不同,如何为此创建 byte[]?在创建会话中有其他更好的选择吗?
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.1和netstandard2.0,并在项目文件中使用条件来添加框架引用或单独的 2.X 包取决于目标。Andrew Lock 有一个很好的指南和更多信息:https : //andrewlock.net/converting-a-netstandard-2-library-to-netcore-3/
还值得一提的是,System.Text.Json支持直接序列化 to/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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16033 次 |
| 最近记录: |