在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
ASP.NET Core中的HttpContext开发,在ASP.NET开发中我们总是会经常用到HttpContext。 那么在ASP.NET Core中要如何使用HttpContext呢,下面就来具体学习ASP.NET Core HttpContext。 注入HttpContextAccessorASP.NET Core中提供了一个IHttpContextAccessor接口,HttpContextAccessor 默认实现了它简化了访问HttpContext。 它必须在程序启动时在IServicesCollection中注册,这样在程序中就能获取到HttpContextAccessor,并用来访问HttpContext。 services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
获取HttpContextAccessor下面来实际做一个操作,获取 HttpContextAccessor。 新建一个ASP.NET Core Web 应用程序,选择Web 应用程序。 身份验证勾选为不进行身份验证。 然后在HomeController 加入如下代码: public class HomeController : Controller { private IHttpContextAccessor _accessor; public HomeController(IHttpContextAccessor accessor) { _accessor = accessor; } public IActionResult Index() { var httpcontext = _accessor.HttpContext; return View(); } } 这样就能获取到 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 类, 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 属性。
如果你觉得本文对你有帮助,请点击“推荐”,谢谢。 博客示例代码GitHub:https://github.com/linezero/Blog
ASP.NET Core中的HttpContext开发,在ASP.NET开发中我们总是会经常用到HttpContext。 那么在ASP.NET Core中要如何使用HttpContext呢,下面就来具体学习ASP.NET Core HttpContext。 注入HttpContextAccessorASP.NET Core中提供了一个IHttpContextAccessor接口,HttpContextAccessor 默认实现了它简化了访问HttpContext。 它必须在程序启动时在IServicesCollection中注册,这样在程序中就能获取到HttpContextAccessor,并用来访问HttpContext。 services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
获取HttpContextAccessor下面来实际做一个操作,获取 HttpContextAccessor。 新建一个ASP.NET Core Web 应用程序,选择Web 应用程序。 身份验证勾选为不进行身份验证。 然后在HomeController 加入如下代码: public class HomeController : Controller { private IHttpContextAccessor _accessor; public HomeController(IHttpContextAccessor accessor) { _accessor = accessor; } public IActionResult Index() { var httpcontext = _accessor.HttpContext; return View(); } } 这样就能获取到 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 类, 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 属性。
如果你觉得本文对你有帮助,请点击“推荐”,谢谢。 |
请发表评论