場景:
在開發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了。