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 miHttpContext
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.