ASP.net Core 2.0无法找到services.AddSession();

时间:2017-08-31 14:55:54

标签: asp.net asp.net-core

如何在ASP.net Core 2.0中使用会话?我正在使用HttpContext.Session.GetString();但是这不会保存到会话中,因为我需要配置Startup.cs以便我可以使用session。

3 个答案:

答案 0 :(得分:2)

您需要在 startup.cs 文件中添加会话作为服务。

请务必在services.AddMvc(); Go to this link for all the details.

之前添加

由于Visual Studio 2017中没有project.json,您可以跳过该部分。

答案 1 :(得分:1)

您需要添加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

答案 2 :(得分:0)

您需要在服务配置中注册会话 -

  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);