您的位置:首页 > 理论基础 > 计算机网络

ASP.NET Core开发之HttpContext

2017-05-11 12:21 716 查看
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 加入如下代码:
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 属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  接口 应用程序 开发