asp.net core中IHttpContextAccessor和HttpContextAccessor的妙用

來源:互聯網
上載者:User

標籤:actor   分享圖片   ace   ica   block   dht   邏輯   ons   TE   

分享一篇文章,關於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<IHttpContextAccessor, HttpContextAccessor>();        }        public static IApplicationBuilder UseStaticHttpContext(this IApplicationBuilder app)        {            var httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();            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    }}

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

歡迎大家關注我都我的 公眾號,公眾號漲粉絲人數,就是你們對我的喜愛程度!

 

asp.net core中IHttpContextAccessor和HttpContextAccessor的妙用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.