溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET Core開發之HttpContext

發布時間:2020-06-21 05:26:37 來源:網絡 閱讀:337 作者:吳金瑞 欄目:編程語言

ASP.NET Core中的HttpContext開發,在ASP.NET開發中我們總是會經常用到HttpContext。

那么在ASP.NET Core中要如何使用HttpContext呢,下面就來具體學習ASP.NET Core HttpContext。

注入HttpContextAccessor

ASP.NET Core中提供了一個IHttpContextAccessor接口,HttpContextAccessor 默認實現了它簡化了訪問HttpContext。

它必須在程序啟動時在IServicesCollection中注冊,這樣在程序中就能獲取到HttpContextAccessor,并用來訪問HttpContext。

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

 

獲取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<IHttpContextAccessor, HttpContextAccessor>();
        }        public static IApplicationBuilder UseStaticHttpContext(this IApplicationBuilder app)
        {            var httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
            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 屬性。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女