2014-01-15 58 views
283
沒有擴展方法

我已經下載,並且運行成功從這裏ASP.NET身份樣本: https://github.com/rustd/AspnetIdentitySampleASP.NET身份 - 的HttpContext有GetOwinContext

我現在是在執行ASP.NET身份的中間在我的項目框架,並碰到了一個問題,那讓我想瘋了,整天...

GetOwinContext()不作爲擴展方法存在於我的HttpContext

我在類庫中實現了身份框架。我已經安裝了Identity框架的所有最新版本(預發佈版本),除此之外,所有內容都工作正常。

我已經嘗試在我的控制器中執行相同的代碼,並找到相同的問題。

顯然我錯過了某處參考,雖然我不知道..

是殺害我的代碼塊是:

private IAuthenticationManager AuthenticationManager 
{ 
    get 
    { 
     return HttpContext.GetOwinContext().Authentication; 
    } 
} 

我已經添加引用以下 - 這些都在我的類庫嘗試,也直接在控制器上,他們沒有爲我工作...

using Microsoft.AspNet.Identity; 
using Microsoft.AspNet.Identity.EntityFramework; 
using Microsoft.Owin.Security; 
using Microsoft.Owin; 
using System.Web; 

...這是推動我逼瘋了....任何想法?

UPDATE

我已經檢查身份& OWIN的版本的樣品中,我已經確信我有我的解決方案版本相同。

更確切地說,如果我在樣本上搜索GetOwinContext的對象瀏覽器,我可以找到該方法,但是當我在我的解決方案中搜索它時,找不到它......我必須有一些庫過期,但我找不到它!

回答

558

ARGH!

我發現它 ...我沒有一個額外的軟件包,名爲Microsoft.Owin.Host.SystemWeb

一旦我搜索並安裝了它,它工作。

現在 - 我不確定我是否錯過了所有的東西,雖然在瀏覽各種教程時發現沒有提及這樣的庫或包。還當我安裝了這一切身份的框架沒有得到安裝...如果不知道這只是我..

編輯 雖然它在Microsoft.Owin.Host.SystemWeb組裝是在System.Web命名空間的擴展方法,所以你需要有前者的參考,並且後者是using

+4

感謝您認爲:我正在使用本教程http://www.asp。net/identity/overview/getting-started/adding-aspnet-identity-to-an-empty-or-existing-web-forms-project並且這是一個缺失的步驟 – frenchie

+0

似乎它現在在那裏 - 無論是我們都錯過了它之前:) – Darren

+0

而不是漫無目的地運行,安裝隨機庫並期望教程成爲參考文檔,應該[在實際參考中查找該方法](http://msdn.microsoft.com/zh-cn/library/ dn270723),然後按照[其類]鏈接(http://msdn.microsoft.com/en-us/library/system.web.httpcontextextensions)(在左側)。然後,它就在你面前:'Assembly:Microsoft.Owin.Host.SystemWeb(在Microsoft.Owin.Host.SystemWeb.dll中)'。從字面上點擊一次。 – tne

137

我相信你需要引用當前的HttpContext,如果你在控制器之外。 MVC控制器具有對當前上下文的基本引用。然而,那外面,你必須明確地聲明你想要的電流HttpContext

return HttpContext.Current.GetOwinContext().Authentication; 

至於它沒有顯示出來,使用代碼一個新的MVC 5項目模板,你看到前面(的IAuthenticationManager)以下使用具有語句在帳戶控制器的頂部:

using System.Threading.Tasks; 
using System.Web; 
using System.Web.Mvc; 
using Microsoft.AspNet.Identity; 
using Microsoft.AspNet.Identity.EntityFramework; 
using Microsoft.Owin.Security; 
using WebApplication2.Models; 

注出的每一個,它出現在GetOwinContext()實際上是System.Web.Mvc組件的一部分。

+0

一直試着這個,只是找不到它。 - 我的意思是GetOwinContext()。 – Darren

+2

@Darren - 我玩了一下示例模板,可能會丟失你的程序集。看起來你需要從你的類項目中引用'System.Web.Mvc'。當註釋掉時,這就是使'HttpContext.GetOwinContext()'變成未知(而不是'Microsoft.Owin.Security'程序集) – Tommy

+0

我一直試圖讓它直接在控制器上工作 - 並且可以再次找不到它。 – Darren

10

確保你安裝了nuget包Microsoft.AspNet.Identity.Owin。然後添加System.Net.Http命名空間。

+0

我也有過。原來安裝了Identity的東西時沒有安裝另一個庫。 – Darren

+0

@達倫請添加包名稱。謝謝 –

+6

@SaturnTechnologies對於我來說,另一個包是Microsoft.Owin.Host.SystemWeb和命名空間System.Web – WiSeeker

18

試錯我比較控制器的使用報表,Asp.Net模板控制器

using System.Web; 

問題解決了,我的後。 你也將需要補充:

using Microsoft.AspNet.Identity; 
using Microsoft.AspNet.Identity.Owin; 

要使用GetUserManager方法。

微軟無法找到一種方法來解決這個問題,自動通過右鍵點擊並解決像其他缺少使用語句?

+1

這也適用於我。我已經有了Identity庫,但它似乎需要System.Web。 – SouthShoreAK

+1

這顯然是在程序集和命名空間中大量移動。它是一種擴展方法,這讓它非常痛苦。我已經更新了我的所有庫,這個答案反映了它現在的位置。 – shannon

+0

啊,你們會不會在一個新的形狀 – JustJohn

1

我有所有正確的軟件包和使用,但必須先構建,然後才能使GetOwinContext()正常工作。

+0

你是如何修復你的構建,使其第一次運作? – Nordes

+0

@Nordes有時VS無法在後臺建立(即:它告訴你有編譯錯誤),但觸發一個真正的構建(或更經常清理,然後構建)將通過它。這可能是凱文正在經歷的。 – Maverick

14

在我的情況下添加Microsoft.AspNet.WebApi.Owin通過nuget refference做了一個小把戲。

+0

是的,這是爲我在當前的最新版本。擴展方法在這個Package中,它是_Assemby_ ** System.Web.Http.Owin **和_Namespace_ ** System.Net.Http ** – OffHeGoes

1

要獲得的UserManager在API

return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>(); 

其中AppUserManager是從的UserManager繼承的類。