当前位置:首页 > Web开发 > 正文

ControllerBase类中有一个HttpContext 属性

2024-03-31 Web开发

在ASP.NET Core中要如何使用HttpContext呢,下面就来具体学习ASP.NET Core HttpContext。

注入HttpContextAccessor

ASP.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