Базовый класс контроллера 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?