ASP.net核心2.0无法找到services.AddSession();
问题描述:
如何在ASP.net Core 2.0中使用会话?我使用HttpContext.Session.GetString();但是这并不会保存到会话中,因为我需要配置Startup.cs以便使用会话。ASP.net核心2.0无法找到services.AddSession();
答
您需要添加Microsoft.AspNetCore.Session NuGet包,然后在ConfigureServices
方法添加对会话的支持:
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(20);
options.CookieHttpOnly = true;
});
查看更多在这里:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state。
答
您需要将会话作为服务添加到startup.cs文件中。
记得以前services.AddMvc();
Go to this link for all the details.
添加它由于在Visual Studio 2017年没有project.json,你可以跳过这一部分。
答
你需要在服务配置注册会议 -
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30);
options.CookieHttpOnly = true;
});
要使用它在构造函数中的任何地方注入。在这里,我使用控制器构造函数进行演示 -
using Microsoft.AspNetCore.Http;
public class AccountController : Controller
{
private ISession _session;
public AccountController(IHttpContextAccessor contextAccessor)
{
_session = contextAccessor.HttpContext.Session;
}
}
现在在会话中获取和设置值以简化我的目的;我用下面的扩展方法 -
public static class HttpSessionExtension
{
public static void Set<T>(this ISession session, string key, T value)
{
session.SetString(key, JsonConvert.SerializeObject(value));
}
public static T Get<T>(this ISession session, string key)
{
var value = session.GetString(key);
return value == null ? default(T) :
JsonConvert.DeserializeObject<T>(value);
}
}
的使用很简单 -
_session.Set<MyModel>(Mykey, value);
_session.Get<MyModel>(Mykey);