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

时间:2018-02-12 11:15:36

标签: asp.net-core asp.net-core-2.0 asp.net-core-mvc-2.0

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

  

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

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

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

1 个答案:

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