为什么我的POST方法返回“未授权”? C#

时间:2017-04-25 22:35:02

标签: c# json xamarin xamarin.forms

http://static.pmmlabs.ru/OpenPeriscope/

我按照“身份验证”下的文档提供示例和错误响应。我在调用POST方法时收到此错误消息:

401 Unauthorized This endpoint requires authentication and no cookie value was provided, or is invalid

令牌应该绝对包含正确的值,所以我认为它必须是代码的东西。这是我目前的代码:

var client = new HttpClient();
client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json; charset=utf-8");
string json = "{" +
            "\"bundle_id\":\"\"," +
            "\"phone_number\":\"\"," +
            "\"session_key\":\"" + key + "\"," +
            "\"session_secret\":\"" + secret + "\"," +
            "\"user_id\":\"" + userid + "\"," +
            "\"user_name\":\"" + name + "\"," +
                        "\"vendor_id\":\"81EA8A9B-2950-40CD-9365-40535404DDE4\"" +
                        "}";
var content = new StringContent(json);
System.Diagnostics.Debug.WriteLine(json);
var response = await client.PostAsync("https://api.periscope.tv/api/v2/loginTwitter", content);
var responseJson = await response.Content.ReadAsStringAsync();
System.Diagnostics.Debug.WriteLine(responseJson);

我放在一起的JSON也是有效的。如果我在日志中写出它,它看起来像这样:

{"bundle_id":"","phone_number":"","session_key":"752365274-loPQJPpyAtwuqcJJtTqk7KlRgbdGgVQ5ahBWuItr","session_secret":"2hY9kLYCwKC3rIGGMlCt523uOy08zc8SEc7w6WSlLLViD","user_id":"752365274","user_name":"My username","vendor_id":"81EA8A9B-2950-40CD-9365-40535404DDE4"}

我遇到了一个帖子,其中一个用户成功地使其工作,但它是使用“HttpWebRequest”方法,我无法使用,因为我在Xamarin Forms(PCL)编码。 Using Twitter login API

如果你查看他自己帖子的答案,你可以看到示例代码。

如何调整当前代码以成功获取JSON响应?

更新:

参数/标记应该是正确的。一直尝试不同的解决方案/代码结构,但它一直给我“未经授权”。这是我尝试使用的最后一个代码(试图模仿我链接的项目):

        var client = new HttpClient();
        var parameters = new Dictionary<string, string> {
            { "session_secret", secret},
            { "user_id", userid},
            { "phone_number", ""},
            { "vendor_id", ""},
            { "bundle_id", "com.bountylabs.periscope"},
            { "session_key", key},
            { "user_name", username}
        };

        var jsonRequest = JsonConvert.SerializeObject(parameters);
        MemoryStream jsonStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(jsonRequest));
        HttpContent content = new StreamContent(jsonStream);

        var response = await client.PostAsync("https://api.periscope.tv/api/v2/loginTwitter", content);
        var responseJson = await response.Content.ReadAsStreamAsync();
        var streamReader = new StreamReader(responseJson);
        var str = streamReader.ReadToEnd();
        System.Diagnostics.Debug.WriteLine(str);

1 个答案:

答案 0 :(得分:0)

授权会话密钥或密钥似乎存在问题。 如果我在你的位置,我会使用其他客户端测试我的请求,以确保我传递正确的参数(特别是“session_key”和“session_secret”)。

为了快速简单地进行此测试,我建议使用Chrome服务器扩展客户端“Restlet Client - DHC”:

您可以使用以下链接添加此扩展程序:

https://chrome.google.com/webstore/detail/restlet-client-dhc/aejoelaoggembcahagimdiliamlcdmfm?hl=en