He descargado y ejecuté con éxito el ejemplo de identidad ASP.NET desde aquí: https://github.com/rustd/AspnetIdentitySample
Ahora estoy en medio de la implementación del marco de identidad 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 un método de extensión en miHttpContext
Estoy implementando el marco de identidad en la biblioteca de clases. He instalado la última versión (versión preliminar) del marco de Identity y todo, aparte de esto, está funcionando 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 alguna parte, ¡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é ambos 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á volviendo loco ... ¿alguna idea?
ACTUALIZAR
Verifiqué las versiones de Identity & OWIN en la muestra y me aseguré de tener las mismas versiones en mi solución.
Más aún, si busco el buscador de objetos en la muestra 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 encuentre!
fuente
var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
(Actual incluido donde no estaba en la pregunta).Creo que debe hacer referencia a la corriente
HttpContext
si está fuera del controlador. Los controladores MVC tienen una referencia base al contexto actual. Sin embargo, aparte de eso, debe declarar explícitamente que desea el actualHttpContext
En cuanto a que no aparece, una nueva plantilla de proyecto MVC 5 que usa el código que muestra arriba (el
IAuthenticationManager
) tiene las siguientes declaraciones de uso en la parte superior del controlador de cuenta:Al comentar cada uno, parece
GetOwinContext()
que en realidad es parte del ensamblaje System.Web.Mvc.fuente
System.Web.Mvc
a su proyecto de clase. Cuando se comentó, eso es lo que hizo que seHttpContext.GetOwinContext()
volviera desconocido (y no laMicrosoft.Owin.Security
asamblea)HttpContext
en laController
clase, por lo que si hereda de eso,HttpContext.GetOwinContext()
funciona como se esperaba. SinApiController
embargo, si hereda de , no existe tal propiedad. Por lo tanto,HttpContext
se referirá a la clase, que requerirá que useCurrent
para acceder a una instancia de la clase. Entonces, si copia / pega el código de un Controlador a un ApiController y se pregunta por qué no funciona, esta es la respuesta para usted.Después de la prueba y error al comparar las declaraciones de uso de mi controlador y el controlador Asp.Net Template
Resolvió el problema para mí. También necesitará agregar:
Para usar el método GetUserManager.
¿Microsoft no pudo encontrar una manera de resolver esto automáticamente con un clic derecho y resolver como otras declaraciones que faltan?
fuente
En mi caso, agregar Microsoft.AspNet.WebApi.Owin referencia a través de nuget hizo el truco.
fuente
Asegúrese de haber instalado el paquete nuget
Microsoft.AspNet.Identity.Owin
. Luego agregueSystem.Net.Http
espacio de nombres.fuente
Microsoft.Owin.Host.SystemWeb
embargo, la sugerencia de Darren de instalar hizo el truco.Solo usando
hizo el truco en mi caso.
fuente
Para los desarrolladores que obtienen este error en el proyecto de API web:
El método de extensión GetOwinContext se define en
System.Web.Http.Owin
dll y se necesitará un paquete más, es decirMicrosoft.Owin.Host.SystemWeb
. Este paquete debe instalarse en su proyecto desde nuget.Enlace al paquete : Comando de instalación del paquete OWIN -
Enlace al paquete System.web : Comando de instalación del paquete -
Para resolver este error, debe averiguar por qué ocurre en su caso. Verifique los puntos siguientes en su código:
Debe tener referencia a
Microsoft.AspNet.Identity.Owin;
usando Microsoft.AspNet.Identity.Owin;
Definir
GetOwinContext()
debajoHttpContext.Current
como abajo -O
Código completo donde se usa GetOwinContext () -
Espacio de nombres que estoy usando en el archivo de código donde se usa GetOwinContext ()
Recibí este error al mover mi código de mi proyecto a otro.
fuente
Para obtener UserManager en API
donde AppUserManager es la clase que hereda de UserManager.
fuente
Tenía todos los paquetes y usos correctos, pero tuve que construir primero antes de poder
GetOwinContext()
trabajar.fuente
Simplemente instale este paquete y su código funcionará: => Install-Package Microsoft.Owin.Host.SystemWeb -Version 2.1.0
fuente