Comparta una aplicación de objeto en toda la aplicación en ASP.NET MVC3
-
29-10-2019 - |
Pregunta
Tengo una aplicación web ASP.NET MVC3 con C# y Razor.
A través de un formulario en una vista, obtengo el Context.User.Identity.Name
enviado a un método de acción en un Controlador A.
Me gustaría tener disponible esta variable en toda la aplicación (entre múltiples controladores). Ahora puedo asignarlo a una variable global _Nombre de usuario dentro de Controlador A, pero, por supuesto, no está disponible en Controlador B.
¿Es posible hacer eso?
Gracias
Francesco
Solución
Si está accediendo a esto en cualquier controlador, debe usar httpcontext.user.identity en sus métodos de controlador: estará disponible allí. No es necesario almacenar en la sesión.
Otros consejos
Cree un controlador principal desde el cual todos sus controladores heredan y establezcan la variable allí. Puede hacer varias cosas con él desde allí: envíelo en un modelo de vista, coloque algunos detalles del usuario en la bolsa de vista, etc.
public class UserController : Controller
{
// create your own User class with as many properties as you need
protected User user { get; set; }
public UserController()
{
user = // get user from db, wherever
}
}
Entonces, solo herede de UserController
public class ControllerA : UserController
{
public ActionResult DoSomething()
{
user.Property = 123;
}
}
Debe considerar el almacenamiento en caché y posiblemente utilizando el almacén de sesión de los usuarios esta información.
Verificar este pregunta.