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

HttpContext使用_元数据

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

HttpContext使用_依赖注入_02

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

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

HttpContext使用_元数据_03

如何使用呢 第一步 我们需要把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

HttpContext使用_构造函数_04