Базовый класс контроллера ASP.NET User.Identity.Name
Как описано в этот пост, я создал абстрактный класс базового контроллера, чтобы иметь возможность передавать данные с контроллера на мастер. стр. В этом случае я хочу искать пользователя в своем db, запрашивая имя User.Identity.Name(только если он вошел в систему).
Однако я заметил, что в этом абстрактном базовом классе свойство User
всегда null
. Что мне нужно сделать, чтобы это работало?
Спасибо большое
Ответы
Ответ 1
Как предположил Пако, viewdata не инициализируется до тех пор, пока вы не попытаетесь его использовать.
Попробуйте переопределить Controller.Initialize() вместо:
public abstract class ApplicationController : Controller
{
private IUserRepository _repUser;
public ApplicationController()
{
}
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
_repUser = RepositoryFactory.getUserRepository();
var loggedInUser = _repUser.FindById(User.Identity.Name);
ViewData["LoggedInUser"] = loggedInUser;
}
}
Ответ 2
Чтобы использовать пользователя, вы должны получить текущую страницу из
HttpContext.Current.User.Identity.Name
Ответ 3
Установив аутентификацию в Windows в web.config, вы можете получить пользователя с User.Identity.Name
Ответ 4
Я использую класс page на моих статических классах Utlilites. Вот так:
Страница P = (Страница) HttpContext.Current.Handler;
и я могу получить все свойства через объект P для текущей запрашиваемой страницы.
Ответ 5
Вы пробовали это:
ControllerContext.HttpContext.Current.User.Identity.Name?