gpt4 book ai didi

c# - Int32 的值太大或太小 - Facebook 和 dotnetopenauth

转载 作者:行者123 更新时间:2023-11-30 16:31:32 25 4
gpt4 key购买 nike

我正在尝试获取一个示例项目以使用 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。

看看this change

关于c# - Int32 的值太大或太小 - Facebook 和 dotnetopenauth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4839511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com