分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

【转】ASP.NET Core开发之HttpContext

发布时间:2023-09-06 02:17责任编辑:熊小新关键词:.NET

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(); ???????}

public class MyService{    public void DoWork()    {        varcontext=HttpContext.Current;        // continue with context instance    }}

这里演示的是在Controller 中调用,其实更多的是在其他地方调用,如中间件及一些自己写的Service。

Controller 中其实可以直接使用HttpContext,ControllerBase类中有一个HttpContext 属性。

 转自:http://www.cnblogs.com/linezero/p/6801602.html

【转】ASP.NET Core开发之HttpContext

原文地址:https://www.cnblogs.com/yunspider/p/9763691.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved