成都网站建设设计

将想法与焦点和您一起共享

ASP.NETCore开发之HttpContext-创新互联

ASP.NET Core中的HttpContext开发,在ASP.NET开发中我们总是会经常用到HttpContext。

成都创新互联致力于网站建设,网站制作设计,营销网页按需定制设计,成都外贸网站建设公司,企业网站建设,小程序设计,网站SEO优化,网站设计制作案例丰富,是成都做网站公司和建站公司,欢迎咨询。

那么在ASP.NET Core中要如何使用HttpContext呢,下面就来具体学习ASP.NET Core HttpContext。

注入HttpContextAccessor

ASP.NET Core中提供了一个IHttpContextAccessor接口,HttpContextAccessor 默认实现了它简化了访问HttpContext。

它必须在程序启动时在IServicesCollection中注册,这样在程序中就能获取到HttpContextAccessor,并用来访问HttpContext。

services.AddSingleton();

获取HttpContextAccessor

下面来实际做一个操作,获取 HttpContextAccessor。

新建一个ASP.NET Core Web 应用程序,选择Web 应用程序。 身份验证勾选为不进行身份验证。

然后在HomeController 加入如下代码:

ASP.NET Core开发之HttpContext

    public class HomeController : Controller
    {        private IHttpContextAccessor _accessor;        public HomeController(IHttpContextAccessor accessor)
        {
            _accessor = accessor;
        }        public IActionResult Index()
        {            var httpcontext = _accessor.HttpContext;            return View();
        }
    }

ASP.NET Core开发之HttpContext

这样就能获取到 HttpContext

ASP.NET Core开发之HttpContext

运行以后就能获取到 HttpContext 对象。上面也说到,必须在程序启动时注入才能获取到HttpContextAccessor。

那么新建的程序是在哪注入的呢。

这里就是在

        public void ConfigureServices(IServiceCollection services)
        {            // Add framework services.            services.AddMvc();
        }

services.AddMvc() 中注入。

实现HttpContext.Current

大家在ASP.NET 中大量用 HttpContext.Current获取HttpContext ,现在ASP.NET Core已经不这么做了。

不过如果你还是想用静态  HttpContext.Current ,降低迁移旧程序的成本,还是可以实现的。

新建一个静态 HttpContext 类,

ASP.NET Core开发之HttpContext

    public static class HttpContext
    {        private static IHttpContextAccessor _accessor;        public static Microsoft.AspNetCore.Http.HttpContext Current => _accessor.HttpContext;        internal static void Configure(IHttpContextAccessor accessor)
        {
            _accessor = accessor;
        }
    }

ASP.NET Core开发之HttpContext

然后接着再添加一个扩展类。

ASP.NET Core开发之HttpContext

    public static class StaticHttpContextExtensions
    {        public static void AddHttpContextAccessor(this IServiceCollection services)
        {
            services.AddSingleton();
        }        public static IApplicationBuilder UseStaticHttpContext(this IApplicationBuilder app)
        {            var httpContextAccessor = app.ApplicationServices.GetRequiredService();
            HttpContext.Configure(httpContextAccessor);            return app;
        }
    }

ASP.NET Core开发之HttpContext

接着就可以在Startup 类中进行调用。

默认情况下如果在MVC项目中直接调用  UseStaticHttpContext() 即可。

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            app.UseStaticHttpContext();

在没有注入 HttpContextAccessor的项目中,还需在ConfigureServices 方法中调用

services.AddHttpContextAccessor();

然后就可以在其他地方使用HttpContext.Current。

        public IActionResult Index()
        {
            var statichttpcontext = HttpContextDemo.HttpContext.Current;            return View();
        }

这里演示的是在Controller 中调用,其实更多的是在其他地方调用,如中间件及一些自己写的Service。

Controller 中其实可以直接使用HttpContext,ControllerBase类中有一个HttpContext 属性。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享名称:ASP.NETCore开发之HttpContext-创新互联
URL网址:http://chengdu.cdxwcx.cn/article/ehdcs.html