ControllerBase类中有一个HttpContext 属性
在ASP.NET Core中要如何使用HttpContext呢,下面就来具体学习ASP.NET Core HttpContext。
注入HttpContextAccessorASP.NET Core中供给了一个IHttpContextAccessor接口,,HttpContextAccessor 默认实现了它简化了访谒HttpContext。
它必需在措施启动时在IServicesCollection中注册,这样在措施中就能获取到HttpContextAccessor,并用来访谒HttpContext。
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
获取HttpContextAccessor下面来实际做一个操纵,获取 HttpContextAccessor。
在HomeController 插手如下代码:
public class HomeController : Controller { private IHttpContextAccessor _accessor; public HomeController(IHttpContextAccessor accessor) { _accessor = accessor; } public IActionResult Index() { var httpcontext = _accessor.HttpContext; return View(); } }
这样就能获取到 HttpContext。上面也说到,必需在措施启动时注入才华获取到HttpContextAccessor。
实现HttpContext.Current大家在ASP.NET 中大量用 HttpContext.Current获取HttpContext ,此刻ASP.NET Core已经不这么做了。
不过如果你还是想用静态 HttpContext.Current ,降低迁移旧措施的本钱,还是可以实现的。
新建一个静态 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; } }
然后接着再添加一个扩展类。
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; } }
接着就可以在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 属性。
ASP.NET Core-如何使用HttpContext
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30590.html