HttpContextAccessor.HttpContext始终在Product Environment上返回null

时间:2017-09-26 09:07:53

标签: c# asp.net-core

VS2017,.net core 2.0,webapi,autofac

我需要在我的服务中使用HttpContext并传递一个http标头作为标记来识别用户,这是一个要注入的SessionContext对象。

builder.RegisterType<HttpContextAccessor>().SingleInstance();
builder.Register(context => context.Resolve<LoginService>().GetSession(context.Resolve<HttpContextAccessor>().HttpContext.Request.Headers));

和其他服务都是这样注册的

//Other services
{
    IRegistrationBuilder<object, Autofac.Features.Scanning.ScanningActivatorData, DynamicRegistrationStyle> MassiveRegister<T>() => builder.RegisterAssemblyTypes(assembly).InNamespace(baseNamespace + ".Services").AssignableTo<T>().Where(t => t.IsClass && !t.IsGenericTypeDefinition && !t.IsAbstract).PreserveExistingDefaults().OnActivated(e => ((IService)e.Instance).Initialize()).OnActivating(e => e.Context.AutoInjectAll(e.Instance));
    MassiveRegister<ISessionalService>().InstancePerLifetimeScope();
    MassiveRegister<IService>().SingleInstance();
}

使用Visual Studio正常执行或调试时,它运行正常, 但是当程序发布(在IIS或自主机上)并在Visual Studio中执行时,HttpContextAccessor.HttpContext总是在其他服务需要SessionContext时返回null(作为通过调用{{注入的属性) 1}}如下)。

InjectUnsetProperties

我尝试了很多方法,例如改变服务的生命周期,改变构建配置......但它们似乎根本没有帮助。

它真的是一个框架错误,或者我需要一个正确的方法来访问//Called by Startup public static class AutoDIExtensions { public static void AutoInjectAll(this IComponentContext context, object obj) { try { context.InjectUnsetProperties(obj); } catch (DependencyResolutionException ex) when (ex.InnerException.UnpackThrough() is ActionException) { throw ex.InnerException; } } }

0 个答案:

没有答案