Asp.net

將 System.Web.HttpContext.Current 轉換為 System.Web.HttpContextBase

  • May 11, 2020

我需要從我的一個控制器的建構子中訪問 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.Currentto System.Web.HttpContextBase

就在這裡:

HttpContextBase httpContext = new HttpContextWrapper(HttpContext.Current);

是的,HttpContext在構造控制器期間該屬性始終為空。Controller.Initialize您可以在方法中(和之後)安全地使用它。

初始化呼叫建構子時可能不可用的數據。

引用自:https://stackoverflow.com/questions/38237129