Как получить доступ к HttpContext из абстрактного базового контроллера? - PullRequest
2 голосов
/ 10 сентября 2009

Я создал абстрактный класс контроллера (ApplicationController) для обработки некоторой аутентификации пользователя, но HttpContext не инициализируется при вызове кода.

public abstract class ApplicationController : Controller
{
    public ApplicationController()        
    {
        string myuser = HttpContext.User.Identity.Name; // NullReferenceException
    }
}

Ответы [ 2 ]

3 голосов
/ 10 сентября 2009

Ясир прав в использовании защищенных конструкторов в абстрактных классах. Но вы правы в том, что это не решит вашу проблему - HttpContext еще не заполнен, поэтому вы получаете нулевые исключения ссылок.

В любом случае, решение простое - переопределите метод Initialize контроллера:

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
    string myuser = this.User.Identity.Name;
    base.Initialize(requestContext);
}
0 голосов
/ 10 сентября 2009

попытайтесь сделать ваш .ctor защищенным

public abstract class ApplicationController : Controller 
{
    protected ApplicationController()
    {
        string myuser = this.User.Identity.Name;
    } 
}

также убедитесь, что вы не пропустили это, используя директиву:

using System.Web.Mvc;
...