我正在使用之前使用Core 1.0的ASP.NET Core 2.0构建应用程序。迁移后一切似乎都运行良好,但是当我尝试使用Session方法app.UseSession()
时,它会抛出以下错误:
'IApplicationBuilder'不包含'UseSession'的定义,也没有可以找到接受类型'IApplicationBuilder'的第一个参数的扩展方法'UseSession'(你是否缺少using指令或程序集引用?)
我尝试从NuGet安装ASPNETCore.Session
包但不能。
任何人都可以帮我找到问题的根本原因吗?
答案 0 :(得分:0)
首先将会话服务注入您的ConfigureServices
方法:
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromSeconds(2400);
options.Cookie.HttpOnly = true;
});
然后在app.UseSession();
方法中使用Configure
。
在ASP.NET核心会话中不支持通用数据类型,您需要添加此扩展
using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
public static class SessionExtensions
{
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);
}
}
并使用它:
public IActionResult SetDate()
{
// Requires you add the Set extension method mentioned in the article.
HttpContext.Session.Set<DateTime>(SessionKeyDate, DateTime.Now);
return RedirectToAction("GetDate");
}
public IActionResult GetDate()
{
// Requires you add the Get extension method mentioned in the article.
var date = HttpContext.Session.Get<DateTime>(SessionKeyDate);
var sessionTime = date.TimeOfDay.ToString();
var currentTime = DateTime.Now.TimeOfDay.ToString();
return Content($"Current time: {currentTime} - "
+ $"session time: {sessionTime}");
}