【愚公系列】2023年02月 WMS智能仓储系统-003.HttpContext的使用
2023-06-13 09:17:28 时间
文章目录
前言
网页和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();
}
}
相关文章
- 养老院视频监控智能分析系统
- 智能视频分析系统的大数据应用
- 分析Linux系统的执行过程
- NFT智能合约分红系统开发搭建(现成源码)
- DAPP智能合约系统开发技术概念讲解方案
- 【愚公系列】2023年02月 WMS智能仓储系统-010.全局过滤、中间件、格式化配置
- 【愚公系列】2023年02月 WMS智能仓储系统-001.NLog日志的使用
- 【愚公系列】2023年02月 WMS智能仓储系统-002.多语言功能实现
- 最佳实践 | 基于腾讯云MRCP-Server打造简单智能外呼系统
- 关键词优化系统|智能优化「白狐公羊seo」
- Linux系统下Qt4开发之旅(linuxqt4程序)
- 对 Linux 系统线程 ID 进行研究(linux线程id)
- 解决Linux系统时间不正确问题(linux时间不对)
- 渗透系统深入了解Linux分支渗透系统(linux的分支)
- Linux系统新玩法:仿Mac风格打造高颜值桌面界面(linux仿mac)
- MacOS: 如何更新系统版本(macos怎么更新)
- Linux:多用途的开放源码操作系统(linux是一种什么系统)