2009-09-10 2 views
2

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

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

ответ

0

пытается сделать свое .ctor защищенного

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

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

using System.Web.Mvc; 
+0

какая разница, если т е р сделан защищен? – San

+0

@San: прочитайте это http://msdn.microsoft.com/en-us/library/ms229047.aspx –

3

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

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

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
{ 
    string myuser = this.User.Identity.Name; 
    base.Initialize(requestContext); 
} 
Смежные вопросы