Xamarin Social组件无法检索Twitter json流

时间:2013-09-08 07:53:47

标签: json twitter twitter-oauth xamarin social

我正在使用以下内容阅读Twitter json。它适用于一个uri而不是另一个。 uri使用Twitter API控制台而不是Xamarin.Social。我在Twitter应用程序上有读写权限,所以我无法看到我出错的地方。

https://api.twitter.com/1.1/account/settings.json   <-- works
https://api.twitter.com/1.1/users/show.json?screen_name=AUserName   <-- fails (see error below)


request.GetResponseAsync ().ContinueWith (response => {

            if (response.IsFaulted)
            {
                Console.WriteLine (response.Exception.Flatten ()); 
            }

            var json = response.Result.GetResponseText ();


System.AggregateException: One or more errors occured ---> System.Net.WebException: The remote server returned an error: (401) Unauthorized.
   at System.Net.HttpWebRequest.CheckFinalStatus (System.Net.WebAsyncResult result) [0x0030c] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/HttpWebRequest.cs:1606 
   at System.Net.HttpWebRequest.SetResponseData (System.Net.WebConnectionData data) [0x00141] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/HttpWebRequest.cs:1423 
   --- End of inner exception stack trace ---
   --> (Inner exception 0) System.Net.WebException: The remote server returned an error: (401) Unauthorized.
   at System.Net.HttpWebRequest.CheckFinalStatus (System.Net.WebAsyncResult result) [0x0030c] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/HttpWebRequest.cs:1606 
   at System.Net.HttpWebRequest.SetResponseData (System.Net.WebConnectionData data) [0x00141] in /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/HttpWebRequest.cs:1423 

[快速谷歌搜索给了这个,但不确定它是否相关:https://dev.twitter.com/discussions/15206]

// UPDATE ***********

这是额外的帮助还是您需要更多详细信息?如果是,那么需要哪些细节?

public Account Account
    {
        get
        {
            var task = Service.GetAccountsAsync ()
                .ContinueWith (accounts => 
            {
                return accounts.Result.ToList ().FirstOrDefault ();
            });

            return task.Result;
        }
        set
        {
            AccountStore.Create ().Save (value, SocialPlatform.ToString ());
        }
    }


// later on
// when endpoint = "https://api.twitter.com/1.1/account/settings.json" <-- works, json returned
// when endpoint = "https://api.twitter.com/1.1/users/show.json?screen_name=XXXX" <-- IsFaulted with above error, 

var request = Service.CreateRequest ("GET", endpoint, Account);

        request.GetResponseAsync ().ContinueWith (response => {

            if (response.IsFaulted)
            {
                Console.WriteLine (response.Exception.Flatten ());
                return;
            }

            var json = response.Result.GetResponseText ();
            Console.WriteLine (json);
        });

1 个答案:

答案 0 :(得分:0)

您拨打此电话时似乎未获得授权。

来自Xamarin.Social文档。

  

Xamarin.Social使用Xamarin.Auth库来获取和存储   帐户对象。

     

每个服务都公开一个返回a的GetAuthenticateUI方法   您可以使用Xamarin.Auth.Authenticator对象进行身份验证   用户。这样做会自动存储经过身份验证的帐户   它可以在以后使用。

它在Twitter API控制台中运行的原因是您在拨打电话之前已经在那里授权。

如果您已在自己的应用中进行授权,请发布您用于授权的代码。