簡體   English   中英

Int32的價值太大或太小 - Facebook和dotnetopenauth

[英]Value was either too large or too small for an Int32 - Facebook & dotnetopenauth

我正在嘗試使用dotnetopenauth和facebook進行示例項目。

我有這個代碼

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語句。

但是我遇到了這個錯誤(發生在var graph = FacebookGraph.Deserialize(responseStream ))

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);
        }
    }
}

AccessToken有什么變化嗎? 他們現在變大了嗎?

我知道這個示例使用的是比當前版本的dotnetopenauth更舊的版本,但當前版本不包含facebook

dotnetopenauth CTP

是的,Facebook ID現在應該是Int64而不是Int32。

看看這個變化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM