【问题标题】:WebClient failing on physical device and emulatorWebClient 在物理设备和模拟器上失败
【发布时间】:2012-07-08 04:55:23
【问题描述】:

更新:

也许只是我不了解 oAuth 的工作原理?我试着跑步 在 http://www.apikitchen.com 上手动查询,我收到 400 错误 也有!可以肯定的是,我在这里正确构建了 URL 吗?

发布网址:

https://api.bufferapp.com/1/oauth2/token.json?client_id=[hidden]&client_secret=[hidden]&redirect_uri=http://apps.joel-murphy.com/buffer/code/success.php&code=[the 我从缓冲区获取的访问代码 1/]&grant_type=authorization_code

原帖:

我正在构建一个需要使用网站数据的 Windows Phone 应用程序。该网站使用 oAuth 对用户进行身份验证。

我使用内置的 Web 浏览器控件发出 GET 请求来验证用户身份。官方文档要求URL结构是这样的:

获取https://bufferapp.com/oauth2/authorize? client_id=...& 重定向uri=...& response_type=code

我的应用程序的这一部分有效。尽管在将授权令牌交换为来自服务器的访问令牌时,我遇到了问题。官方文档要求URL结构是这样的:

发布https://api.bufferapp.com/1/oauth2/token.json? client_id=...& client_secret=...& 重定向uri=...& 代码=...& grant_type=authorization_code

如果我错了,请纠正我,但据我所知,除非提交表单,否则无法从浏览器发出 POST 请求。为此,我决定使用WebClient 类向服务器提交数据。但是,无论我是在实际设备上还是在 Visual Studio 模拟器上运行我的代码,我总是会收到以下错误:

远程服务器返回错误:NotFound

有人知道下面的代码有什么问题吗?我在 2 天内花了 5 个多小时试图解决此错误,但似乎没有任何效果。

我正在使用的代码:

    WebClient wc = new WebClient();
    wc.UploadStringCompleted += new UploadStringCompletedEventHandler(wc_UploadStringCompleted);

    wc.UploadStringAsync(new Uri(access_token_url), "POST", GetPostParameters());


    void wc_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
    {
        try 
        {
            MessageBox.Show(e.Result);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

    string GetPostParameters()
    {
        string data = "";
        data += "client_id="+client_id + "&";
        data += "client_secret=" +client_secret + "&";
        data += "redirect_uri=" + redirect_uri+ "&";
        data += "code=" + App.AccessToken + "&";
        data += "grant_type=authorization_code";
        return data;
    }

有人知道出了什么问题吗?这让我发疯了,当 oauth 成为当今如此常用的技术时,它必须如此复杂,这真是太可惜了。

提前致谢。

【问题讨论】:

  • 有一些 OAuth 包装器 including this one 可以简化整个过程 - 可能值得使用类似的东西来解决签名问题
  • 干杯伙伴,我现在检查一下并很快报告:)
  • 我将 OAuthWebRequest 类添加到我的解决方案中,但是它包含 99 个错误,我不知道如何修复:( 无论如何感谢

标签: c# windows-phone-7 post oauth webclient


【解决方案1】:

您可以尝试对 redirect_uri 变量进行 URL 编码吗?

【讨论】:

  • 感谢您的回复。我尝试将代码更改为此,但我仍然得到完全相同的错误: data += "redirect_uri=" + HttpUtility.UrlEncode(redirect_uri) + "&";
  • 我刚刚更新了OP,你觉得可以看一下吗?
  • 您没有在更新后的帖子中对您的 URL 进行编码。编码后的 URL 应该是 http%3A%2F%2Fapps.joel-murphy.com%2Fbuffer%2Fcode%2Fsuccess.php
猜你喜欢
  • 2015-08-07
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2012-05-16
  • 1970-01-01
  • 2021-04-07
  • 2021-05-15
相关资源
最近更新 更多