关于.net core.net如何获取登录信息调用HttpContext问题

个回答HttpContext.Current在ASP.NET Core中不再存在,但是可以在依赖关系中注入一个新的并用于检索当前HttpContext:public class MyComponent : IMyComponent
private readonly IHttpContextAccessor _contextA
public MyComponent(IHttpContextAccessor contextAccessor)
_contextAccessor = contextA
public string GetDataFromSession()
return _contextAccessor.HttpContext.Session.GetString(*KEY*);
}下面的方法是积极参与执行快速工作,但它的工作原理是:在 public class Startup添加一个属性public IConfigurationRoot Configuration { }然后在ConfigreServices中向DI添加一个单例IHttpContextAccessor。
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
services.AddSingleton&Microsoft.AspNetCore.Http.IHttpContextAccessor, Microsoft.AspNetCore.Http.HttpContextAccessor&();然后在配置中
public void Configure(
IApplicationBuilder app
,IHostingEnvironment env
,ILoggerFactory loggerFactory
{添加DI参数IServiceProvider svp,因此该方法看起来如下:
public void Configure(
IApplicationBuilder app
,IHostingEnvironment env
,ILoggerFactory loggerFactory
,IServiceProvider svp)
{接下来,为System.Web创建一个替换类:namespace System.Web
namespace Hosting
public static class HostingEnvironment
public static bool m_IsH
static HostingEnvironment()
m_IsHosted =
public static bool IsHosted
return m_IsH
public static class HttpContext
public static IServiceProvider ServiceP
static HttpContext()
public static Microsoft.AspNetCore.Http.HttpContext Current
// var factory2 = ServiceProvider.GetService&Microsoft.AspNetCore.Http.IHttpContextAccessor&();
object factory = ServiceProvider.GetService(typeof(Microsoft.AspNetCore.Http.IHttpContextAccessor));
// Microsoft.AspNetCore.Http.HttpContextAccessor fac =(Microsoft.AspNetCore.Http.HttpContextAccessor)
Microsoft.AspNetCore.Http.HttpContext context = ((Microsoft.AspNetCore.Http.HttpContextAccessor)factory).HttpC
// context.Response.WriteAsync(&Test&);
} // End Class HttpContext
}现在在配置中,添加的位置IServiceProvider svp将此服务提供者保存到刚创建的虚拟类System.Web.HttpContext(System.Web.HttpContext.ServiceProvider)中的静态变量“ServiceProvider”并将HostingEnvironment.IsHosted设置为trueSystem.Web.Hosting.HostingEnvironment.m_IsHosted =这基本上就是System.Web所做的事情,只是从未见过它(我想变量被声明为内部变量而不是public变量)。// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider svp)
loggerFactory.AddConsole(Configuration.GetSection(&Logging&));
loggerFactory.AddDebug();
ServiceProvider =
System.Web.HttpContext.ServiceProvider =
System.Web.Hosting.HostingEnvironment.m_IsHosted =
app.UseCookieAuthentication(new CookieAuthenticationOptions()
AuthenticationScheme = &MyCookieMiddlewareInstance&,
LoginPath = new Microsoft.AspNetCore.Http.PathString(&/Account/Unauthorized/&),
AccessDeniedPath = new Microsoft.AspNetCore.Http.PathString(&/Account/Forbidden/&),
AutomaticAuthenticate = true,
AutomaticChallenge = true,
CookieSecure = Microsoft.AspNetCore.Http.CookieSecurePolicy.SameAsRequest
, CookieHttpOnly=false
});就像在ASP.NET Web-Forms中一样,当你尝试访问一个HttpContext的时候,你会得到一个NullReference,如果它没有,比如它曾经Application_Start在global.asax中。我再次强调,这只适用于实际添加services.AddSingleton&Microsoft.AspNetCore.Http.IHttpContextAccessor, Microsoft.AspNetCore.Http.HttpContextAccessor&();
欢迎使用DI模式中的ServiceLocator模式
或者在学习.NET Core的源,并进行一些测试。也许更可维护的方法是添加这个帮助类namespace System.Web
public static class HttpContext
private static Microsoft.AspNetCore.Http.IHttpContextAccessor m_httpContextA
public static void Configure(Microsoft.AspNetCore.Http.IHttpContextAccessor httpContextAccessor)
m_httpContextAccessor = httpContextA
public static Microsoft.AspNetCore.Http.HttpContext Current
return m_httpContextAccessor.HttpC
}然后在Startup-& Configure中调用HttpContext.Configurepublic void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider svp)
loggerFactory.AddConsole(Configuration.GetSection(&Logging&));
loggerFactory.AddDebug();
System.Web.HttpContext.Configure(app.ApplicationServices.
GetRequiredService&Microsoft.AspNetCore.Http.IHttpContextAccessor&()
);扫描二维码扫描关注云+社区今晚在学习.net Core 的使用 拿来以前项目进行改造最简单的问题就是怎么做到让httpcontext 和以前兼容 ,折腾的很久 终于搞定,纪录一下
.net core中使用了无处不在的注入,看了站长大人关于注入的文章恍然大悟。解决方法如下:
1:首先在 &我们创建一个静态类 MyHttpContext
public static class MyHttpContext
public static IServiceProvider ServiceP
static MyHttpContext()
public static HttpContext Current
object factory = ServiceProvider.GetService(typeof(Microsoft.AspNetCore.Http.IHttpContextAccessor));
HttpContext context = ((HttpContextAccessor)factory).HttpC
2: 然后在startup.cs文件中
  在Configure方法 添加
services.TryAddSingleton&IHttpContextAccessor, HttpContextAccessor&();
&改写ConfigureServices方法&
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider svp)
///省n多代码
System.Web.NewHttpContext.ServiceProvider =
ok 终于可以和以前那样 直接在项目中使用 HtppContext。。。。。。
阅读(...) 评论()ASP.NET Core开发之HttpContext
时间: 15:16:11
&&&& 阅读:195
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&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&_&&&&&&&&public&HomeController(IHttpContextAccessor&accessor)
&&&&&&&&&&&&_accessor&=&
&&&&&&&&}&&&&&&&&public&IActionResult&Index()
&&&&&&&&{&&&&&&&&&&&&var&httpcontext&=&_accessor.HttpC&&&&&&&&&&&&return&View();
&&&&}这样就能获取到&HttpContext650) this.width=650;" src="http://images2015.cnblogs.com/blog/705/70-.png"
style="margin:0padding:0border:0" />运行以后就能获取到&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&_&&&&&&&&public&static&Microsoft.AspNetCore.Http.HttpContext&Current&=&&_accessor.HttpC&&&&&&&&internal&static&void&Configure(IHttpContextAccessor&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&
&&&&}接着就可以在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.C&&&&&&&&&&&&return&View();
&&&&&&&&}这里演示的是在Controller 中调用,其实更多的是在其他地方调用,如中间件及一些自己写的Service。Controller 中其实可以直接使用HttpContext,ControllerBase类中有一个HttpContext 属性。标签:&&&&&&&&&原文:http://.blog.51cto.com/2344
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!在.net Core 中像以前那样的使用HttpContext.Current
时间: 07:53:49
&&&& 阅读:1279
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&今晚在学习.net Core 的使用 拿来以前项目进行改造最简单的问题就是怎么做到让httpcontext 和以前兼容 ,折腾的很久 终于搞定,纪录一下
.net core中使用了无处不在的注入,看了站长大人关于注入的文章恍然大悟。解决方法如下:
1:首先在 &我们创建一个静态类 MyHttpContext
public static class MyHttpContext
public static IServiceProvider ServiceP
static MyHttpContext()
public static HttpContext Current
object factory = ServiceProvider.GetService(typeof(Microsoft.AspNetCore.Http.IHttpContextAccessor));
HttpContext context = ((HttpContextAccessor)factory).HttpC
2: 然后在startup.cs文件中
  在Configure方法 添加
services.TryAddSingleton&IHttpContextAccessor, HttpContextAccessor&();
&改写ConfigureServices方法&
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IServiceProvider svp)
///省n多代码
System.Web.NewHttpContext.ServiceProvider =
ok 终于可以和以前那样 直接在项目中使用 HtppContext。。。。。。
&标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:http://www.cnblogs.com/SpeakHero/p/6127883.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!asp.net core中IHttpContextAccessor和HttpContextAccessor的妙用
时间: 00:18:52
&&&& 阅读:143
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&
分享一篇文章,关于asp.net core中httpcontext的拓展。
现在,试图围绕HttpContext.Current构建你的代码真的不是一个好主意,但是我想如果你正在迁移一个企业类型的应用程序,那么很多HttpContext.Current会围绕这个业务逻辑,它可能会提供一些暂时的缓解移植应用程序的条款。另外,在过去了一些我不一定认为是好主意的事情。
我们现代的HttpContext.Current将依赖于从IHttpContextAccessor解析上下文,并且可能如下所示:
namespace System.Web
public static class HttpContext
private static IHttpContextAccessor _contextA
public static Microsoft.AspNetCore.Http.HttpContext Current =& _contextAccessor.HttpC
internal static void Configure(IHttpContextAccessor contextAccessor)
_contextAccessor = contextA
请注意,我们甚至将它放置在System.Web命名空间中,以便您进行任何潜在的迁移更容易一些。
我们只需要在处理流水线中尽可能早地将代码添加到Configure中,并传入IHttpContextAccessor。这可以通过两种扩展方法来实现:
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&();
Common.HttpContext.Configure(httpContextAccessor);
第一个将在启动时从ConfigureServices中调用,并在DI中注册访问器。我们已经确定,这是默认IHttpContextFactory正确分享其HttpContext实例所必需的。
第二个将在启动时从Configure中调用,并且它将确保我们的自定义HttpContext.Current被赋予其IHttpContextAccessor以使其可以正常工作。
就是这样&这是我的Startup类,为静态HttpContext.Current设置表。
public class Startup
public void ConfigureServices(IServiceCollectionservices)
services.AddHttpContextAccessor();
public void Configure(IApplicationBuilderapp)
app.UseStaticHttpContext();
app.UseMvc();
public class MyService
public void DoWork()
var context=HttpContext.C
// continue with context instance
好了这篇文章也解了我很久的惑,今天就分享到这里!
欢迎大家关注我都我的微信 公众号,公众号涨粉丝人数,就是你们对我的喜爱程度!
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文地址:https://www.cnblogs.com/gdsblog/p/9119611.html
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!

我要回帖

更多关于 .net 调用jar 的文章

 

随机推荐