ASP.NET Core開發(fā)之HttpContext

現(xiàn)在,試圖圍繞HttpContext.Current構(gòu)建你的代碼真的不是一個好主意,但是我想如果你正在遷移一個企業(yè)類型的應(yīng)用程序,那么很多HttpContext.Current會圍繞這個業(yè)務(wù)邏輯,它可能會提供一些暫時的緩解移植應(yīng)用程序的條款。另外,在過去我已經(jīng)寫了一些我不一定認(rèn)為是好主意的事情。

我們現(xiàn)代的HttpContext.Current將依賴于從IHttpContextAccessor解析上下文,并且可能如下所示:

{
    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;
        }
    }
}

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。這可以通過兩種擴展方法來實現(xiàn):

  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ào)用,并在DI中注冊訪問器。我們已經(jīng)確定,這是默認(rèn)IHttpContextFactory正確分享其HttpContext實例所必需的。

第二個將在啟動時從Configure中調(diào)用,并且它將確保我們的自定義HttpContext.Current被賦予其IHttpContextAccessor以使其可以正常工作。

就是這樣 這是我的Startup類,為靜態(tài)HttpContext.Current設(shè)置表。

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

例子:

public class MyService
{
    public void DoWork()
    {
        varcontext=HttpContext.Current;
        // continue with context instance
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • feisky云計算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,379評論 0 5
  • 1. ASP.NET Core 運行原理剖析1.1. 概述1.2. 文件配置1.2.1. Starup文件配置Co...
    xdpie閱讀 3,555評論 0 2
  • 這件事讓我很煩躁,其實我還想著有機會跟那個人當(dāng)面吵架,那樣才爽。真沒見過那樣的人,說話比老天變臉還快,能把一件事翻...
    潔yjie閱讀 231評論 0 0
  • 發(fā)現(xiàn)了一部好看的年代劇,《遙遠的婚約》,灰暗的畫面,簡單走心的臺詞和演員融入戲里的表情和眼神。我叫不出演員的名字,...
    夏小棠的白小夏閱讀 1,832評論 0 6
  • 也許 你只是一段回憶 但你可知道 常常會有人經(jīng)過你的窗前 黑夜很友善 月光總是陪我入眠 多年以來 我第一次用淚水淹...
    旅居者閱讀 187評論 0 3

友情鏈接更多精彩內(nèi)容