博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net core中IHttpContextAccessor和HttpContextAccessor的妙用
阅读量:7209 次
发布时间:2019-06-29

本文共 1988 字,大约阅读时间需要 6 分钟。

分享一篇文章,关于asp.net core中httpcontext的拓展。

现在,试图围绕HttpContext.Current构建你的代码真的不是一个好主意,但是我想如果你正在迁移一个企业类型的应用程序,那么很多HttpContext.Current会围绕这个业务逻辑,它可能会提供一些暂时的缓解移植应用程序的条款。另外,在过去了一些我不一定认为是好主意的事情。

我们现代的HttpContext.Current将依赖于从IHttpContextAccessor解析上下文,并且可能如下所示:

namespace System.Web{    public static class HttpContext    {        private static IHttpContextAccessor _contextAccessor;        public static Microsoft.AspNetCore.Http.HttpContext Current => _contextAccessor.HttpContext;        internal static void Configure(IHttpContextAccessor contextAccessor)        {            _contextAccessor = contextAccessor;        }    }}

  

请注意,我们甚至将它放置在System.Web命名空间中,以便您进行任何潜在的迁移更容易一些。

我们只需要在处理流水线中尽可能早地将代码添加到Configure中,并传入IHttpContextAccessor。这可以通过两种扩展方法来实现:

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
(); Common.HttpContext.Configure(httpContextAccessor); return app; }

  

第一个将在启动时从ConfigureServices中调用,并在DI中注册访问器。我们已经确定,这是默认IHttpContextFactory正确分享其HttpContext实例所必需的。

第二个将在启动时从Configure中调用,并且它将确保我们的自定义HttpContext.Current被赋予其IHttpContextAccessor以使其可以正常工作。

就是这样 这是我的Startup类,为静态HttpContext.Current设置表。

public class Startup    {        public void ConfigureServices(IServiceCollectionservices)        {            services.AddHttpContextAccessor();        }         public void Configure(IApplicationBuilderapp)        {            app.UseStaticHttpContext();            app.UseMvc();        }    }

例子:

public class MyService{    public void DoWork()    {        var context=HttpContext.Current;        // continue with context instance    }}

好了这篇文章也解了我很久的惑,今天就分享到这里!


欢迎大家关注我都我的微信 公众号,公众号涨粉丝人数,就是你们对我的喜爱程度!

 

转载地址:http://qsrum.baihongyu.com/

你可能感兴趣的文章
ASP.NET 4.5.256 has not been registered on the Web server
查看>>
shell编程之文本与日志过滤
查看>>
重构中对设计模式的反思
查看>>
安卓Launcher之获取手机安装的应用列表,安卓launcher
查看>>
ElasticSearch 2 (10) - 在ElasticSearch之下(深入理解Shard和Lucene Index)
查看>>
数据库事务的隔离级别
查看>>
CSS教程:div垂直居中的N种方法[转]
查看>>
Ubuntu下的svn的安装
查看>>
Android handler Thread 修改UI Demo
查看>>
js 基于函数伪造的方式实现继承
查看>>
Map集合遍历的2种方法
查看>>
桶排序-py
查看>>
cflow察看工程函数调用关系+Linux 0.11 内核实验环境
查看>>
Duplicate fragment name ERROR Jetty Maven Plugin
查看>>
Hbase关于Java常用API举例
查看>>
c语言: 文件io, 拷贝文件(二进制)
查看>>
mysql性能优化-慢查询分析、优化索引和配置
查看>>
MYSQL操作数据表中的记录
查看>>
系统内存和CPU管理、监控
查看>>
java枚举的应用
查看>>