Asp.net

“System.Web.HttpContext”不包含“GetOwinContext”之謎的定義

  • August 7, 2015

我意識到這個問題對某些人來說可能看起來微不足道,但正是這些類型的事情讓我發現自己有很多問題,我只是想弄清楚這一切,儘管這似乎是 .net 中的一場失敗的戰鬥(無論如何對我來說)。

因此,如果我執行以下操作:

   using System.Web;
...
ApplicationUser user = System.Web.HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.User.Identity.GetUserId());

這會在標題和紅色中產生錯誤,GetOwinContext()並且錯誤無法解析符號’GetOwinContext()’

但是,如果我執行以下操作(System.Web從 前面刪除HttpContext),它會按預期工作(或至少沒有錯誤):

using System.Web;
   ...
   ApplicationUser user = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.User.Identity.GetUserId());

但是,如果我這樣做(using System.Web註釋掉的同一行):

   //using System.Web;
           ...
ApplicationUser user = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>().FindById(System.Web.HttpContext.User.Identity.GetUserId());

它產生相同的紅色GetOwinContext()並且錯誤無法解析符號’GetOwinContext()’

如果我GoogleHttpContext我只能發現它源於System.Web.

那麼,問題是為什麼我不能使用上面第一個範例中的完整語法?(這裡的答案中也提到了最高票數:ASP.NET MVC 5 - Identity. How to get current ApplicationUser

更新(以解決重複的問題回复):雖然該問題的答案可能得出相同的結論,但我真的不明白這是一個重複的問題。嘗試從新手的角度來思考它,並剖析 .Net 的所有煙霧和鏡子。我從來沒有嘗試過像 .Net 那樣在我的生活中學習如此復雜的東西,有時你必須從許多不同的角度來看待事物。

我實際上看到了這個問題和另一個關於使用的問題,Current,但都沒有讓我覺得 1)是我(當時)正在尋找的答案 2)更重要的是,為什麼它會這樣。山姆的回答是完美的,雖然有點過頭了。但是,至少現在,我可以去研究這一切意味著什麼……

當你System.Web.HttpContext實際上在寫作時,你是在指向一個類。但是,當您HttpContext在控制器內部編寫時,您使用的是一個名為的屬性,該屬性HttpContext返回該類的一個對象HttpContext。您還可以通過呼叫System.Web.HttpContext.Current靜態屬性來達到相同的對象。因此你可以寫:

System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();

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