ASP.NET Core中的HttpContext開發(fā),在ASP.NET開發(fā)中我們總是會(huì)經(jīng)常用到HttpContext。
成都創(chuàng)新互聯(lián)致力于網(wǎng)站建設(shè),網(wǎng)站制作設(shè)計(jì),營銷網(wǎng)頁按需定制設(shè)計(jì),成都外貿(mào)網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站建設(shè),小程序設(shè)計(jì),網(wǎng)站SEO優(yōu)化,網(wǎng)站設(shè)計(jì)制作案例豐富,是成都做網(wǎng)站公司和建站公司,歡迎咨詢。那么在ASP.NET Core中要如何使用HttpContext呢,下面就來具體學(xué)習(xí)ASP.NET Core HttpContext。
ASP.NET Core中提供了一個(gè)IHttpContextAccessor接口,HttpContextAccessor 默認(rèn)實(shí)現(xiàn)了它簡化了訪問HttpContext。
它必須在程序啟動(dòng)時(shí)在IServicesCollection中注冊,這樣在程序中就能獲取到HttpContextAccessor,并用來訪問HttpContext。
services.AddSingleton();
下面來實(shí)際做一個(gè)操作,獲取 HttpContextAccessor。
新建一個(gè)ASP.NET Core Web 應(yīng)用程序,選擇Web 應(yīng)用程序。 身份驗(yàn)證勾選為不進(jìn)行身份驗(yàn)證。
然后在HomeController 加入如下代碼:
public class HomeController : Controller { private IHttpContextAccessor _accessor; public HomeController(IHttpContextAccessor accessor) { _accessor = accessor; } public IActionResult Index() { var httpcontext = _accessor.HttpContext; return View(); } }
這樣就能獲取到 HttpContext
運(yùn)行以后就能獲取到 HttpContext 對象。上面也說到,必須在程序啟動(dòng)時(shí)注入才能獲取到HttpContextAccessor。
那么新建的程序是在哪注入的呢。
這里就是在
public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddMvc(); }
services.AddMvc() 中注入。
大家在ASP.NET 中大量用 HttpContext.Current獲取HttpContext ,現(xiàn)在ASP.NET Core已經(jīng)不這么做了。
不過如果你還是想用靜態(tài) HttpContext.Current ,降低遷移舊程序的成本,還是可以實(shí)現(xiàn)的。
新建一個(gè)靜態(tài) 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; } }
然后接著再添加一個(gè)擴(kuò)展類。
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 (); HttpContext.Configure(httpContextAccessor); return app; } }
接著就可以在Startup 類中進(jìn)行調(diào)用。
默認(rèn)情況下如果在MVC項(xiàng)目中直接調(diào)用 UseStaticHttpContext() 即可。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { app.UseStaticHttpContext();
在沒有注入 HttpContextAccessor的項(xiàng)目中,還需在ConfigureServices 方法中調(diào)用
services.AddHttpContextAccessor();
然后就可以在其他地方使用HttpContext.Current。
public IActionResult Index() { var statichttpcontext = HttpContextDemo.HttpContext.Current; return View(); }
這里演示的是在Controller 中調(diào)用,其實(shí)更多的是在其他地方調(diào)用,如中間件及一些自己寫的Service。
Controller 中其實(shí)可以直接使用HttpContext,ControllerBase類中有一個(gè)HttpContext 屬性。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。