- ¿Cómo puedo obtener la identificación del usuario actualmente conectado? MVC 5 ? Intenté las sugerencias de StackOverflow, pero parecen no ser para MVC 5.
- Además, ¿cuál es la mejor práctica de MVC 5 de asignar cosas a los usuarios? (por ejemplo, una
User
debe tenerItems
. debo guardar del usuarioId
enItem
? ¿Puedo extender laUser
clase con unaList<Item>
propiedad de navegación?
Estoy usando "Cuentas de usuario individual" de la plantilla MVC.
Probé estos:
- ¿Cómo obtengo el usuario actual en una aplicación MVC?
- Cómo obtener el usuario actual en ASP.NET MVC
- Inicie sesión en la ID del usuario : esto arroja lo siguiente:
'Membership.GetUser ()' es nulo.
c#
asp.net
asp.net-mvc
asp.net-mvc-5
asp.net-identity
Adam Szabo
fuente
fuente
HttpContext.Current.User.Identity.Name
es el nombre del usuario actualmente registrado.Item
que crea, pero no en función del nombre de usuario (eso podría cambiar). No funciona por la forma en que 'HttpContext.Current' System.Web.HttpContextBase 'no contiene una definición para' Current 'y no se puede encontrar ningún método de extensión' Current 'que acepte un primer argumento de tipo' System.Web.HttpContextBase '( ¿Le falta una directiva de uso o una referencia de ensamblado?) `. ¿Estás seguro de que tu solución es para MVC 5?Respuestas:
Si está codificando en un controlador ASP.NET MVC, use
Vale la pena mencionar que
User.Identity.IsAuthenticated
yUser.Identity.Name
funcionará sin agregar lausing
declaración mencionada anteriormente . PeroGetUserId()
no estará presente sin él.Si está en una clase que no sea un controlador, use
En la plantilla predeterminada de MVC 5, la ID de usuario es un GUID almacenado como una cadena.
Todavía no hay mejores prácticas, pero encontré información valiosa sobre cómo extender el perfil de usuario:
Identity
: https://devblogs.microsoft.com/aspnet/introducing-asp-net-identity-a-membership-system-for-asp-net-applications/fuente
GetUserId
es un método de extensión almacenado en la parte inferiorAss_Start\IdentityConfig.cs
, donde sea que necesite usarlo, si se encuentra en un espacio de nombres diferente, tendrá que configurar elusing Microsoft.AspNet.Identity
para que la extensión sea visible.Intenta algo como:
Funciona con RTM.
fuente
Si desea el objeto ApplicationUser en una línea de código (si tiene instalada la última identidad ASP.NET), intente:
Necesitará lo siguiente usando declaraciones:
fuente
Obtener el Id es bastante sencillo y lo has resuelto.
Sin embargo, su segunda pregunta es un poco más complicada.
Por lo tanto, todo esto es una versión preliminar en este momento, pero el problema común que enfrenta es dónde está extendiendo al usuario con nuevas propiedades (o una colección de Artículos en su pregunta).
Fuera de la caja obtendrá un archivo llamado
IdentityModel
en la carpeta Modelos (en el momento de la escritura). Ahí tienes un par de clases;ApplicationUser
yApplicationDbContext
. Para agregar su colección deItems
querrá modificar elApplicationUser
clase, tal como lo haría si fuera una clase normal que estaba usando con Entity Framework. De hecho, si echa un vistazo rápido debajo del capó, encontrará que todas las clases relacionadas con la identidad (Usuario, Rol, etc.) son solo POCO ahora con las anotaciones de datos apropiadas para que funcionen bien con EF6.A continuación, deberá realizar algunos cambios en el
AccountController
constructor para que sepa usar su DbContext.Ahora, para ser honesto, obtener un objeto de usuario completo para su usuario conectado es un poco esotérico.
Esa línea hará el trabajo y podrás acceder
userWithItems.Items
como quieras.HTH
fuente
AccountController
?Siento tu dolor, estoy tratando de hacer lo mismo. En mi caso solo quiero borrar al usuario.
He creado una clase de controlador base de la que todos mis controladores heredan. En él anulo
OnAuthentication
y configuro elfilterContext.HttpContext.User to null
Eso es lo mejor que he logrado hasta ahora ...
fuente
fuente
si alguien más tiene esta situación: estoy creando una verificación por correo electrónico para iniciar sesión en mi aplicación para que mis usuarios aún no hayan iniciado sesión, sin embargo, utilicé lo siguiente para verificar si hay un correo electrónico ingresado en el inicio de sesión, que es una variación de la solución @firecape
También necesitará lo siguiente:
y
fuente
En .Net MVC5 core 2.2, uso HttpContext.User.Identity.Name. Funcionó para mi.
fuente
Así es como obtuve un AspNetUser Id y lo mostré en mi página de inicio
Coloqué el siguiente código en mi método HomeController Index ()
En la página de vista solo llame
Ejecute el proyecto y podrá ver su ID de usuario
fuente