首页 文章

'IApplicationBuilder'不包含'UseSession'的定义

提问于
浏览
0

我正在使用早期使用Core 1.0的ASP.NET Core 2.0构建应用程序 . 迁移后一切似乎都运行正常,但是当我尝试使用Session方法 app.UseSession() 时,它会抛出以下错误:

'IApplicationBuilder'不包含'UseSession'的定义,也没有扩展方法'UseSession'接受类型'IApplicationBuilder'的第一个参数(你是否缺少using指令或汇编引用?)

我尝试从NuGet安装 ASPNETCore.Session 包但不能 .

任何人都可以帮我找到问题的根本原因吗?

1 回答

  • 0

    首先将Session Service注入 ConfigureServices 方法:

    services.AddSession(options =>
    {
          // Set a short timeout for easy testing.
          options.IdleTimeout = TimeSpan.FromSeconds(2400);
          options.Cookie.HttpOnly = true;
    });
    

    然后在 Configure 方法中使用 app.UseSession(); .

    在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}");
    }
    

相关问题