2011-01-29 91 views
3

我想要获得一个示例项目来与dotnetopenauth和facebook一起工作。Value32对于Int32来说太大或太小了 - Facebook和dotnetopenauth

我有这样的代码

namespace OAuthClient 
{ 
    using System; 
    using System.Configuration; 
    using System.Net; 
    using System.Web; 
    using DotNetOpenAuth.ApplicationBlock; 
    using DotNetOpenAuth.ApplicationBlock.Facebook; 
    using DotNetOpenAuth.OAuth2; 

public partial class Facebook : System.Web.UI.Page 
{ 
    private static readonly FacebookClient client = new FacebookClient 
    { 
     ClientIdentifier = ConfigurationManager.AppSettings["facebookAppID"], 
     ClientSecret = ConfigurationManager.AppSettings["facebookAppSecret"], 
    }; 

    protected void Page_Load(object sender, EventArgs e) 
    { 

     IAuthorizationState authorization = client.ProcessUserAuthorization(); 

     if (authorization == null) 
     { 
      var authorizationState = new AuthorizationState() 
      { 
       Callback = new Uri(Request.Url, "http://localhost:3000/Facebook.aspx/") 
      }; 
      client.PrepareRequestUserAuthorization(authorizationState).Send(); 
     } 
     else 
     { 
      var request = WebRequest.Create("https://graph.facebook.com/me?access_token=" + Uri.EscapeDataString(authorization.AccessToken)); 
      using (var response = request.GetResponse()) 
      { 
       using (var responseStream = response.GetResponseStream()) 
       { 
        var graph = FacebookGraph.Deserialize(responseStream); 
        this.nameLabel.Text = HttpUtility.HtmlEncode(graph.Name); 
       } 
      } 
     } 
    } 
} 

}

所以我提出请求,第一至Facebook和工作不错,很好。然后我得到他们的回应,并进入else语句。

不过,我碰到这个错误)

Server Error in '/' Application. 
Value was either too large or too small for an Int32. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.OverflowException: Value was either too large or too small for an Int32. 

Source Error: 

Line 49:   } 
Line 50: 
Line 51:   return (FacebookGraph)jsonSerializer.ReadObject(jsonStream); 
Line 52:  } 
Line 53: } 


Source File: C:\Users\user\Downloads\DotNetOpenAuth-3.5.0.10357\DotNetOpenAuth-3.5.0.10357\Samples\DotNetOpenAuth.ApplicationBlock\Facebook\FacebookGraph.cs Line: 51 

Stack Trace: 

[OverflowException: Value was either too large or too small for an Int32.] 
    System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +7471379 
    System.Runtime.Serialization.Json.XmlJsonReader.ParseInt(String value, NumberStyles style) +68 

[XmlException: The value '100000325104290' cannot be parsed as the type 'Int32'.] 
    System.Runtime.Serialization.Json.XmlJsonReader.ParseInt(String value, NumberStyles style) +259 
    System.Runtime.Serialization.Json.XmlJsonReader.ReadContentAsInt() +22 
    System.Xml.XmlDictionaryReader.ReadElementContentAsInt() +62 
    System.Runtime.Serialization.XmlReaderDelegator.ReadElementContentAsInt() +26 
    ReadFacebookGraphFromJson(XmlReaderDelegator , XmlObjectSerializerReadContextComplexJson , XmlDictionaryString , XmlDictionaryString[]) +628 
    System.Runtime.Serialization.Json.JsonClassDataContract.ReadJsonValueCore(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) +58 
    System.Runtime.Serialization.Json.JsonDataContract.ReadJsonValue(XmlReaderDelegator jsonReader, XmlObjectSerializerReadContextComplexJson context) +31 
    System.Runtime.Serialization.Json.XmlObjectSerializerReadContextComplexJson.ReadDataContractValue(DataContract dataContract, XmlReaderDelegator reader) +25 
    System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator reader, String name, String ns, DataContract& dataContract) +128 
    System.Runtime.Serialization.XmlObjectSerializerReadContext.InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, DataContract dataContract, String name, String ns) +39 
    System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, DataContract dataContract, String name, String ns) +32 
    System.Runtime.Serialization.Json.DataContractJsonSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName) +1048152 
    System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName) +98 

[SerializationException: There was an error deserializing the object of type DotNetOpenAuth.ApplicationBlock.Facebook.FacebookGraph. The value '100000325104290' cannot be parsed as the type 'Int32'.] 
    System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName) +496 
    System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject(XmlDictionaryReader reader) +43 
    System.Runtime.Serialization.Json.DataContractJsonSerializer.ReadObject(Stream stream) +67 
    DotNetOpenAuth.ApplicationBlock.Facebook.FacebookGraph.Deserialize(Stream jsonStream) in C:\Users\user\Downloads\DotNetOpenAuth-3.5.0.10357\DotNetOpenAuth-3.5.0.10357\Samples\DotNetOpenAuth.ApplicationBlock\Facebook\FacebookGraph.cs:51 
    OAuthClient.Facebook.Page_Load(Object sender, EventArgs e) in C:\Users\user\Downloads\DotNetOpenAuth-3.5.0.10357\DotNetOpenAuth-3.5.0.10357\Samples\OAuthClient\Facebook.aspx.cs:39 
    System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14 
    System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35 
    System.Web.UI.Control.OnLoad(EventArgs e) +99 
    System.Web.UI.Control.LoadRecursive() +50 
    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627 


Version Information: Microsoft .NET Framework Version:2.0.50727.4952; ASP.NET Version:2.0.50727.4955 

那么这个类被调用

//----------------------------------------------------------------------- 
// <copyright file="FacebookGraph.cs" company="Andrew Arnott"> 
//  Copyright (c) Andrew Arnott. All rights reserved. 
// </copyright> 
//----------------------------------------------------------------------- 

namespace DotNetOpenAuth.ApplicationBlock.Facebook { 
    using System; 
    using System.Collections.Generic; 
    using System.IO; 
    using System.Linq; 
    using System.Runtime.Serialization; 
    using System.Runtime.Serialization.Json; 
    using System.Text; 

    [DataContract] 
    public class FacebookGraph { 
     private static DataContractJsonSerializer jsonSerializer = new DataContractJsonSerializer(typeof(FacebookGraph)); 

     [DataMember(Name = "id")] 
     public int Id { get; set; } 

     [DataMember(Name = "name")] 
     public string Name { get; set; } 

     [DataMember(Name = "first_name")] 
     public string FirstName { get; set; } 

     [DataMember(Name = "last_name")] 
     public string LastName { get; set; } 

     [DataMember(Name = "link")] 
     public Uri Link { get; set; } 

     [DataMember(Name = "birthday")] 
     public string Birthday { get; set; } 

     public static FacebookGraph Deserialize(string json) { 
      if (String.IsNullOrEmpty(json)) { 
       throw new ArgumentNullException("json"); 
      } 

      return Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(json))); 
     } 

     public static FacebookGraph Deserialize(Stream jsonStream) { 
      if (jsonStream == null) { 
       throw new ArgumentNullException("jsonStream"); 
      } 

      return (FacebookGraph)jsonSerializer.ReadObject(jsonStream); 
     } 
    } 
} 

(基于VAR graph = FacebookGraph.Deserialize(responseStream发生)有事同的accessToken改变?他们现在变大了吗?

我知道这个样品是使用比当前版本dotnetopenauth,但当前版本的旧版本不包括Facebook的

dotnetopenauth CTP

回答

3

是,Facebook的ID应该是Int64的,而不是为Int32现在。

看看this change

相关问题