HttpContext.Current.User является нулевым в ControllerBase (asp.net mvc) - PullRequest
8 голосов
/ 14 сентября 2010

У меня есть класс ControllerBase в приложении ASP.NET MVC.Другие контроллеры наследуются от ControllerBase.

Я хочу получить доступ к HttpContext.User.Identity.Name, но HttpContext - это null.В чем дело?

public ControllerBase()
        {
            var dataManager=new DataManager();
            if (HttpContext.User.Identity.IsAuthenticated) // throws error
            {                    
                ViewData["assets"] = ud.BalanceFreeze + ud.Balance + ud.BalanceRealty;
                ViewData["onaccount"] = ud.Balance;
                ViewData["pending"] = ud.BalanceFreeze;
                ViewData["inrealty"] = ud.BalanceRealty;
            }

Ответы [ 2 ]

11 голосов
/ 14 сентября 2010

Попробуйте добавить свой код к этому событию в вашей ControllerBase:

protected override void Initialize(RequestContext requestContext){

}
5 голосов
/ 14 сентября 2010

Ваш контроллер создается до того, как ASP.NET установит HttpContext. Как говорит Ник, вам нужно поместить этот код в переопределенный метод в вашем классе.

Я также хотел бы отметить, что зависимость от HttpContext напрямую сделает невозможным выполнение модульного тестирования на любом из ваших контроллеров, расширяющих этот класс. Вот почему многие методы (например, метод Execute) в классе ControllerBase принимают RequestContext в качестве аргумента. Вы можете сказать:

protected override void Execute(System.Web.Routing.RequestContext requestContext)
{
    var currentUser = requestContext.HttpContext.User;
    ...
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...