2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > ASP.NET Core开发之HttpContext

ASP.NET Core开发之HttpContext

时间:2020-01-02 03:48:05

相关推荐

ASP.NET Core开发之HttpContext

Core中的HttpContext开发,在开发中我们总是会经常用到HttpContext。

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

注入HttpContextAccessor

Core中提供了一个IHttpContextAccessor接口,HttpContextAccessor默认实现了它简化了访问HttpContext。

它必须在程序启动时在IServicesCollection中注册,这样在程序中就能获取到HttpContextAccessor,并用来访问HttpContext。

services.AddSingleton<IHttpContextAccessor,HttpContextAccessor>();

获取HttpContextAccessor

下面来实际做一个操作,获取HttpContextAccessor。

新建一个 Core Web 应用程序,选择Web 应用程序。 身份验证勾选为不进行身份验证。

然后在HomeController 加入如下代码:

publicclassHomeController:Controller{privateIHttpContextAccessor_accessor;publicHomeController(IHttpContextAccessoraccessor){_accessor=accessor;}publicIActionResultIndex(){varhttpcontext=_accessor.HttpContext;returnView();}}

这样就能获取到HttpContext

运行以后就能获取到HttpContext 对象。上面也说到,必须在程序启动时注入才能获取到HttpContextAccessor。

那么新建的程序是在哪注入的呢。

这里就是在

publicvoidConfigureServices(IServiceCollectionservices){//Addframeworkservices.services.AddMvc();}

services.AddMvc() 中注入。

实现HttpContext.Current

大家在 中大量用 HttpContext.Current获取HttpContext ,现在 Core已经不这么做了。

不过如果你还是想用静态 HttpContext.Current ,降低迁移旧程序的成本,还是可以实现的。

新建一个静态 HttpContext 类,

publicstaticclassHttpContext{privatestaticIHttpContextAccessor_accessor;publicstaticMicrosoft.AspNetCore.Http.HttpContextCurrent=>_accessor.HttpContext;internalstaticvoidConfigure(IHttpContextAccessoraccessor){_accessor=accessor;}}

然后接着再添加一个扩展类。

publicstaticclassStaticHttpContextExtensions{publicstaticvoidAddHttpContextAccessor(thisIServiceCollectionservices){services.AddSingleton<IHttpContextAccessor,HttpContextAccessor>();}publicstaticIApplicationBuilderUseStaticHttpContext(thisIApplicationBuilderapp){varhttpContextAccessor=app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();HttpContext.Configure(httpContextAccessor);returnapp;}}

接着就可以在Startup 类中进行调用。

默认情况下如果在MVC项目中直接调用 UseStaticHttpContext() 即可。

publicvoidConfigure(IApplicationBuilderapp,IHostingEnvironmentenv,ILoggerFactoryloggerFactory){app.UseStaticHttpContext();

在没有注入HttpContextAccessor的项目中,还需在ConfigureServices 方法中调用

services.AddHttpContextAccessor();

然后就可以在其他地方使用HttpContext.Current。

publicIActionResultIndex(){varstatichttpcontext=HttpContextDemo.HttpContext.Current;returnView();}

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。