【愚公系列】2023年02月 WMS智能仓储系统-003.HttpContext的使用
【摘要】 前言网页和webapi程序交互是通过 HttpContext 传导,HttpContext包含了Cookie、Seesion、提交表单、上传数据、身份认证等信息。HttpContext 对象主要包含以下信息:Request用于获取用户请求的对象,浏览器向Web程序提交表单、访问的URL、URL中包含的查询字符串、报文请求头等等。Body获取或设置 RequestBody 流ContentL...
前言
网页和webapi程序交互是通过 HttpContext 传导,HttpContext包含了Cookie、Seesion、提交表单、上传数据、身份认证等信息。
HttpContext 对象主要包含以下信息:
- Request
用于获取用户请求的对象,浏览器向Web程序提交表单、访问的URL、URL中包含的查询字符串、报文请求头等等。 - Body
获取或设置 RequestBody 流 - ContentLength
获取或设置 Content-Length 头 - ContentType
获取或设置Content-Type 头 - Cookies
获取或设置 Cookies - Form
获取或设置 表单内容 - HasFormContentType
Checks the Content-Type header for form types. - Headers
Gets the request headers. - Host
获取或设置主机头。可以包括端口 - HttpContext
获取或设置请求上下文 - IsHttps
检测当前是否HTTPS连接 - Method
获取或设置HTTP方法 - Path
获取或设置当前请求的路径,即URL - PathBase
获取或设置 RequestPathBase,就是URL前面那一段,如https://docs.microsoft.com - Protocol
Gets or sets the RequestProtocol. - Query
查询字符串的集合 - QueryString
获取或设置用于在Request.Query中创建查询集合的原始查询字符串 - Scheme
获取或设置HTTP请求方案
在.NET Core中访问HttpContext需要进行注入,.NET Core中内置了IHttpContextAccessor接口,HttpContextAccessor默认实现了它简化了访问HttpContext。它必须在程序启动时在IServicesCollection中注册,这样在程序中就能获取到HttpContextAccessor,并用来访问HttpContext。
一、HttpContext的使用
1.注入
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
2.控制器中使用
/// <summary>
/// asn controller
/// </summary>
[Route("Home")]
[ApiController]
[ApiExplorerSettings(GroupName = "Base")]
public class HomeController : BaseController
{
private IHttpContextAccessor _accessor;
public HomeController(IHttpContextAccessor accessor)
{
_accessor = accessor;
}
[HttpGet]
public async Task<IActionResult> GetAsync()
{
var httpcontext = _accessor.HttpContext;
return Ok();
}
}
3.运行
二、Session和Cookies的封装
1.封装类
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));
}
}
2.注入
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
//这里只是为了在homecontroller中使用依赖注入 接口实现方法内容
services.AddSingleton<ISessionHelper, SessionHelper>();
3.使用
/// <summary>
/// asn controller
/// </summary>
[Route("Home")]
[ApiController]
[ApiExplorerSettings(GroupName = "Base")]
public class HomeController : BaseController
{
private readonly ISessionHelper Ihelper;
public HomeController(ISessionHelper SessionHelper)
{
Ihelper = SessionHelper;
}
[HttpGet]
public async Task<IActionResult> GetAsync()
{
Ihelper.Set("my_session", "我是session实例");
var my_session = HttpContext.Session.GetString("my_session");
return Ok();
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)