2009-09-10 60 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 2009-09-10 02:07:23

+0

@San:閱讀http://msdn.microsoft.com/en-us/library/ms229047.aspx – 2009-09-10 02:16:31

3

亞瑟爾大約是在抽象類中使用受保護的構造正確的。但是你是正確的,它不能解決你的問題 - HttpContext仍然沒有完全填充,所以你得到空引用異常。

總之,解決方法很簡單 - 覆蓋控制器的初始化方法:

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
{ 
    string myuser = this.User.Identity.Name; 
    base.Initialize(requestContext); 
}