asp.net core 3.1 公共类里获取 HttpContext 的方法

场景:

在开发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了。

 

posted @ 2020-07-18 20:33  沐雪架构师  阅读(2348)  评论(2编辑  收藏  举报