Базовый класс контроллера ASP.NET User.Identity.Name - PullRequest
4 голосов
/ 09 января 2009

Как описано в этом посте , я создал абстрактный базовый класс контроллеров, чтобы иметь возможность передавать данные из контроллера в master.page. В этом случае я хочу найти пользователя в моей базе данных, запрашивая User.Identity.Name (только если он вошел в систему).

Однако я заметил, что в этом абстрактном базовом классе свойство User всегда равно null. Что мне нужно сделать, чтобы это работало?

Большое спасибо

Ответы [ 5 ]

7 голосов
/ 30 октября 2009

Как предположил Пако, данные представления не инициализируются до тех пор, пока вы не попытаетесь их использовать.

Попробуйте вместо этого переопределить 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;
    }
}
3 голосов
/ 09 января 2009

Чтобы использовать пользователя, вы должны получить текущую страницу от

HttpContext.Current.User.Identity.Name
1 голос
/ 30 апреля 2009

Установив аутентификацию для Windows в web.config, вы можете получить пользователя с User.Identity.Name

0 голосов
/ 12 января 2009

Вы пробовали это: ControllerContext.HttpContext.Current.User.Identity.Name?

0 голосов
/ 12 января 2009

Я использую класс Page в своих статических классах Utlilites. Вот так;

Page P = (Page) HttpContext.Current.Handler;

и я могу получить все свойства через объект P для текущей запрашиваемой страницы.

...