HttpContext使用(session和cookie)

我这边举两个例子

第一种使用方式 直接在控制器中使用 因为控制器直接在继承了controller,而controller继承了 ControllerBase ,ControllerBase 中有httpcontext的方法。


可以对session cookie user 等进行使用 以下实例是session的使用

第二种使用方式 使用 IHttpContextAccessor HttpContext访问器

可以看到在从元数据中 他们的关系

如何使用呢 第一步 我们需要把IHttpContextAccessor依赖注入到Service中

 services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
//这里只是为了在homecontroller中使用依赖注入 接口实现方法内容
 services.AddSingleton<ISessionHelper, SessionHelper>();

第二步 我们新建一个Isessionhelp接口 和一个sessionhelp帮助类

public interface ISessionHelper
    {
        void Set(string key, string value);
        void Get(string key);
        void SetObjectAsJson(string key, object value);
    }

实现接口类

  public class SessionHelper : ISessionHelper
    {
        //使用构造函数注入IHttpContextAccessor 
        private readonly IHttpContextAccessor _httpContextAccessor;
        /// <summary>
        /// 声明session接收
        /// </summary>
        private ISession _session => _httpContextAccessor.HttpContext.Session;
        /// <summary>
        /// 声明Cookies接收
        /// </summary>
        private IResponseCookies responseCookies => _httpContextAccessor.HttpContext.Response.Cookies;

        public SessionHelper(IHttpContextAccessor httpContextAccessor)
        {
            _httpContextAccessor = httpContextAccessor;
        }

        public void Set(string key, string value)
        {
            //这里的方法只是上面简化版下面用
            //_httpContextAccessor.HttpContext.Session.SetString(key, value);
            // _httpContextAccessor.HttpContext.Response.Cookies.Append(key, value);

            //session存值
            _session.SetString(key, value);
            //Cookies存值
            responseCookies.Append(key, value);
        }

        public void Get(string key)
        {
            string code = _session.GetString(key);
        }
        public void SetObjectAsJson(string key, object value)
        {
            _session.SetString(key, JsonConvert.SerializeObject(value));
        }
    }
 public class HomeController : CookieHelper
    {
        private readonly ISessionHelper Ihelper ;
        public HomeController(ISessionHelper SessionHelper)
        {
            Ihelper = SessionHelper;
        }
        public IActionResult Index()
        {
            Ihelper.Set("code1", "你好我是外部接口加Service建的session实例");
            ViewBag.Code1 = HttpContext.Session.GetString("code1");
            return View();
        }
    }

最终实现效果 因为刚刚的set中同时存了cookie和session

posted @ 2021-09-09 18:05  原往  阅读(1587)  评论(0)    收藏  举报