c# - ¿Cómo obtener OwinContext de Global.asax?
asp.net-mvc simple-injector (1)
He arreglado esto con lo siguiente:
container.RegisterPerWebRequest(() =>
{
if (HttpContext.Current != null && HttpContext.Current.Items["owin.Environment"] == null && container.IsVerifying())
{
return new OwinContext().Authentication;
}
return HttpContext.Current.GetOwinContext().Authentication;
});
Parece que OwnContext no está presente en el inicio, así que lo esperaré e inyectaré una vez que esté presente. Tenga en cuenta que el container.IsVerifying()
está presente en SimpleInjector.Advanced
Estoy tratando de configurar mi inyección de dependencia y tengo la necesidad de inyectar un IAuthenticationManager
de la identidad de ASP.NET a un OwinContext
.
Para esto soy de mi Global.asax -> ServiceConfig.Configure()
ejecutando:
container.Register(() => HttpContext.Current.GetOwinContext().Authentication);
Pero cuando estoy ejecutando mi aplicación recibo este mensaje:
No se encontró ningún elemento owin.Environment en el contexto
¿Por qué este HttpContext.Current.GetOwinContext () no está disponible en Global.asax?
Startup.cs
[assembly: OwinStartupAttribute(typeof(MyApp.Web.Startup))]
namespace Speedop.Web
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
}
}
}
Startup.Auth.cs
public partial class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<UserManager<User, int>, User, int>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentityCallback: (manager, user) => manager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie),
getUserIdCallback: (id) => (Int32.Parse(id.GetUserId()))
)
}
});
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}
}