Asp.net
將 System.Web.HttpContext.Current 轉換為 System.Web.HttpContextBase
我需要從我的一個控制器的建構子中訪問 OwinContext,如下所示:
protected SEMController() { var currentUserIsAdmin = false; var currentUserName = System.Web.HttpContext.Current.User?.Identity?.Name; if (!string.IsNullOrEmpty(currentUserName)) { var user = UserManager.Users .SingleOrDefault(u => u.UserName.Equals(currentUserName, StringComparison.InvariantCultureIgnoreCase)); if (user != null) { currentUserIsAdmin = UserManager.IsInRole(user.Id, UserType.Admin); } } TempData["CurrentUserIsAdmin"] = currentUserIsAdmin; }其中
UserManager是同一個控制器的一個屬性,它看起來像這樣:public ApplicationUserManager UserManager { get { if (_userManager == null) { _userManager = HttpContext.GetOwinContext() .GetUserManager<ApplicationUserManager>(); } return _userManager; } private set { _userManager = value; } }但是,當程式碼在 ctor 中時,作為類
HttpContext的屬性Controller並且是類型System.Web.HttpContextBase而不是System.Web.HttpContext實例的 為空。但是由於無論如何 ASP.NET 框架只是將資訊從一個地方復製到另一個地方,因此它們將擁有的資訊,在稍後的某個時間點,將是相同的。
所以,我想知道是否可以
OwinContext通過直接使用該System.Web.HttpContext.Current屬性來獲得對 的引用。但是,該屬性是類型System.Web.HttpContext,因為它GetOwinContext是類型的擴展方法System.Web.HttpContextBase,我看到這兩個類彼此沒有任何關係。所以,我想知道是否有辦法從
System.Web.HttpContext.CurrenttoSystem.Web.HttpContextBase?
就在這裡:
HttpContextBase httpContext = new HttpContextWrapper(HttpContext.Current);是的,
HttpContext在構造控制器期間該屬性始終為空。Controller.Initialize您可以在方法中(和之後)安全地使用它。初始化呼叫建構子時可能不可用的數據。