【问题标题】:ASP.net Core 2.0 cant find services.AddSession();ASP.net Core 2.0 找不到 services.AddSession();
【发布时间】:2017-09-01 15:23:29
【问题描述】:

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

【问题讨论】:

    标签: asp.net asp.net-core


    【解决方案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】:

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

      记得在services.AddMvc();前面加上Go to this link for all the details.

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

      【讨论】:

        【解决方案3】:

        你需要在服务配置中注册Session -

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-10
          • 1970-01-01
          • 2018-01-28
          • 1970-01-01
          • 2021-09-05
          • 2017-07-07
          相关资源
          最近更新 更多