2014-03-05 189 views
4

我已經使用DotNetOpenAuth做了谷歌登錄,它工作正常,但所有的突然我漸漸對序列不包含任何元素

Exception Details: System.InvalidOperationException: Sequence contains no elements 

源錯誤異常:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

堆棧跟蹤:

[InvalidOperationException: Sequence contains no elements] 
    System.Linq.Enumerable.First(IEnumerable`1 source) +269 
    DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) +250 

[ProtocolException: No OpenID endpoint found.] 
    DotNetOpenAuth.OpenId.RelyingParty.OpenIdRelyingParty.CreateRequest(Identifier userSuppliedIdentifier, Realm realm, Uri returnToUrl) +296 
    OpenIDGoogleLogin.Page_Load(Object sender, EventArgs e) +4626 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51 
    System.Web.UI.Control.OnLoad(EventArgs e) +92 
    System.Web.UI.Control.LoadRecursive() +54 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +772 

但有些時候它工作正常。我不明白這是什麼問題。請檢查我收到異常的問題。

string discoveryUri = "https://www.google.com/accounts/o8/id"; 
OpenIdRelyingParty openid = new OpenIdRelyingParty(); 
string queryString = ""; 
var b = new UriBuilder(Request.Url) { Query = queryString }; 
var req = openid.CreateRequest(discoveryUri, b.Uri, b.Uri); 
var fetchRequest = new FetchRequest(); 
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Contact.Email); 
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.First); 
fetchRequest.Attributes.AddRequired(WellKnownAttributes.Name.Last); 
req.AddExtension(fetchRequest); 
req.RedirectToProvider(); 
+0

您應該顯示產生堆棧跟蹤的代碼,即'OpenIDGoogleLogin.Page_Load' – CodingIntrigue

+0

已更新我的問題中的代碼。請看看它。 –

+0

你找到了解決辦法嗎? – samirprogrammer

回答

1

此錯誤是因爲您的列表中沒有元素而您嘗試使用單個元素。 使用前檢查列表是否爲空,或確保列表中至少應包含一個元素。

+1

-1:你不應該因爲得到一個'Sequence contains no elements'異常而無意識地使用'SingleOrDefault'。首先,你必須瞭解*爲什麼*你會得到例外,*然後*你可以知道如何解決它。也許這是正確的,它必須是一個單一的元素。 – Albireo

+0

你是正確的albireo,我已經糾正了答案 –

1

就我而言,這是由於Web應用程序無法聯繫Google(使用Google OpenId的ASP.NET需要直接與www.google.com/accounts交談,而不是簡單的302重定向)。

我在1and1上託管。在1and1 IIS上運行的應用程序不能直接聯繫不在同一臺服務器上的網站。我一直在使用他們提供的代理。我的Web應用程序需要位於另一個1and1網址上的Google和另一個WCF Web服務。突然間,突然之間,WCF服務停止工作,除非我刪除了1and1代理。但刪除代理意味着Google無法聯繫。

因此,我放回了1and1代理,但修改了WCF綁定配置以繞過代理,並且使用Google帳戶的身份驗證再次發揮作用!

希望這可以幫助您解決問題。

相關問題