tutorial tables net mvc framework español asp c# asp.net asp.net-mvc asp.net-identity

c# - tables - Identidad ASP.NET-HttpContext no tiene un método de extensión para GetOwinContext



asp.net identity web api (8)

He descargado y ejecutado con éxito el ejemplo de identidad de ASP.NET desde aquí: https://github.com/rustd/AspnetIdentitySample

Ahora estoy implementando el marco de identidad de ASP.NET en mi proyecto y me he encontrado con un problema que me ha vuelto loco todo el día ...

GetOwinContext() no existe como método de extensión en mi HttpContext

Estoy implementando el marco de identidad en la biblioteca de clases. He instalado todo lo último (versión de prelanzamiento) del marco de Identidad y todo, aparte de esto, funciona bien.

He intentado implementar el mismo código que el mismo directo en mi controlador y encuentro el mismo problema.

Claramente me falta una referencia en algún lugar, aunque no tengo idea de qué ..! ..

El bloque de código que me está matando es:

private IAuthenticationManager AuthenticationManager { get { return HttpContext.GetOwinContext().Authentication; } }

He agregado referencias a lo siguiente: probé esto en mi biblioteca de clases y también directamente en el controlador, ninguno de ellos funciona para mí ...

using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Owin.Security; using Microsoft.Owin; using System.Web;

... esto me está llevando a la pared ... alguna idea?

ACTUALIZAR

He comprobado las versiones de Identity & OWIN en la muestra y me he asegurado de tener las mismas versiones en mi solución.

Más aún, si busco el buscador de objetos en la muestra para GetOwinContext puedo encontrar el método, sin embargo, cuando lo busco en mi solución, no se encuentra en ninguna parte ... Debo tener alguna biblioteca desactualizada, pero puedo no lo encuentras!


ARGH!

Lo encontré ... no tenía un paquete adicional, llamado Microsoft.Owin.Host.SystemWeb

Una vez que busqué e instalé esto, funcionó.

Ahora, no estoy seguro de si me lo perdí todo, aunque no encontré NINGUNA referencia a dicha biblioteca o paquete al pasar por varios tutoriales. Tampoco se instaló cuando instalé todo este marco de Identidad ... No estoy seguro de que fuera solo yo ...

EDITAR Aunque está en el ensamblado Microsoft.Owin.Host.SystemWeb , es un método de extensión en el espacio de nombres System.Web , por lo que necesita tener la referencia al primero y using el último.


Asegúrese de haber instalado el paquete nuget Microsoft.AspNet.Identity.Owin . Luego agregue el espacio de nombres System.Net.Http .


Creo que necesita hacer referencia al HttpContext actual si está fuera del controlador. Los controladores MVC tienen una referencia básica al contexto actual. Sin embargo, aparte de eso, tiene que declarar explícitamente que desea el HttpContext actual

return HttpContext.Current.GetOwinContext().Authentication;

En cuanto a que no aparece, una nueva plantilla de proyecto MVC 5 con el código que se muestra arriba (el IAuthenticationManager ) tiene las siguientes declaraciones de uso en la parte superior del controlador de la cuenta:

using System.Threading.Tasks; using System.Web; using System.Web.Mvc; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.EntityFramework; using Microsoft.Owin.Security; using WebApplication2.Models;

Comentando cada uno, parece que GetOwinContext() es en realidad una parte del ensamblado System.Web.Mvc.


Después de la prueba y el error comparando las declaraciones de uso de mi controlador y el controlador de plantilla Asp.Net

using System.Web;

Resolví el problema por mí. También necesitarás agregar:

using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.Owin;

Para utilizar el método GetUserManager.

¿Microsoft no pudo encontrar una manera de resolver esto automáticamente con un clic derecho y resolver como otras declaraciones faltantes de uso?


Solo usando

HttpContext.Current.GetOwinContext ()

Hice el truco en mi caso.


Tenía todos los paquetes y usos correctos, pero primero tuve que GetOwinContext() antes de que pudiera hacer que GetOwinContext() funcionara.


en mi caso, agregar una referencia a Microsoft.AspNet.WebApi.Owin a través de nuget hizo un truco.


Para obtener UserManager en API

return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>();

donde AppUserManager es la clase que hereda de UserManager.