分享一篇文章,關於asp.net core中httpcontext的拓展。web
如今,試圖圍繞HttpContext.Current構建你的代碼真的不是一個好主意,可是我想若是你正在遷移一個企業類型的應用程序,那麼不少HttpContext.Current會圍繞這個業務邏輯,它可能會提供一些暫時的緩解移植應用程序的條款。另外,在過去我已經寫了一些我不必定認爲是好主意的事情。api
咱們現代的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命名空間中,以便您進行任何潛在的遷移更容易一些。session
咱們只須要在處理流水線中儘量早地將代碼添加到Configure中,並傳入IHttpContextAccessor。這能夠經過兩種擴展方法來實現:app
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實例所必需的。asp.net
第二個將在啓動時從Configure中調用,而且它將確保咱們的自定義HttpContext.Current被賦予其IHttpContextAccessor以使其能夠正常工做。ui
就是這樣 這是個人Startup類,爲靜態HttpContext.Current設置表。this
public class Startup { public void ConfigureServices(IServiceCollectionservices) { services.AddHttpContextAccessor(); } public void Configure(IApplicationBuilderapp) { app.UseStaticHttpContext(); app.UseMvc(); } }例子:spa
public class MyService { public void DoWork() { var context=HttpContext.Current; // continue with context instance } }好了這篇文章也解了我好久的惑,今天就分享到這裏!.net
歡迎你們關注我都個人微信 公衆號,公衆號漲粉絲人數,就是大家對個人喜好程度!