场景:
在开发web项目的时候,写一些通用的公共方法是很常见的操作,而一些关于Http的操作,经常会用到HttpContext这个对象。
若是在Controller里,我们操作就很简单,可以使用注入的方法直接使用:,比如以下代码:
public class HomeController : Controller { private IHttpContextAccessor _accessor; public HomeController(IHttpContextAccessor accessor) { _accessor = accessor; } [HttpGet] public IActionResult Index(int? id) { var httpcontext = _accessor.HttpContext; return View(httpcontext); } }
详情请看这篇博客:https://www.cnblogs.com/whuanle/p/10077339.html
我们现在要自己封装方法,步骤如下:
首先要知道 HttpContext 是 在 IHttpContextAccessor的里面可以获取;
那么我们就要开发一个公共类,代码如下:
/// <summary> /// 沐雪微淘小程序商城 /// HttpContext公共类 /// </summary> public class AppHttpContext { private static IHttpContextAccessor m_httpContextAccessor; public static void Configure(IHttpContextAccessor httpContextAccessor) { m_httpContextAccessor = httpContextAccessor; } public static HttpContext Current { get { return m_httpContextAccessor.HttpContext; } } public static T GetSerivce<T>() { return (T)Current.RequestServices.GetService(typeof(T)); } public static dynamic GetSerivce(Type type) { return (dynamic)Current.RequestServices.GetService(type); } public static bool IsPost { get { if (m_httpContextAccessor.HttpContext.Request.Method.ToLower().Equals("post")) { return true; } return false; } } public static bool IsAjax { get { string sheader = Current.Request.Headers["X-Requested-With"]; return (sheader != null && sheader == "XMLHttpRequest") ? true : false; } } }
这里用静态类静态方法;IHttpContextAccessor对象需要在程序启动的时候注册进来;需要在Statup里写一行代码,如下:
//添加httpcontext类 AppHttpContext.Configure(services.BuildServiceProvider().GetRequiredService<IHttpContextAccessor>());
ok了。