c# - 如何通过 OAuth 2.0 从 ebay 获取访问 token

标签 c# rest oauth token

这与其说是一个问题,不如说是一个答案。我想我想与您分享这个,因为我有点困惑地发现关于 ebay OAuth 2.0 与 C# web 应用程序结合的信息太少了。

我尝试开始使用 RESTsharp 库,但卡在了创建正文内容的位置。 RESTsharp 更喜欢 XML 或 JSON,ebay 想要一个带参数的字符串。

因此,如果您遇到同样的问题,为了给您一点帮助,我决定发布我的解决方案(不使用 RESTsharp)。

public class HomeController : Controller {
    string clientId = "YOUR_CLIENT_ID";
    string clientSecret = "YOUR_CLIENT_SECRET";
    string ruName = "YOUR_RU_NAME";

//重定向请求以获取请求 token

    public ActionResult Index() {
        var authorizationUrl =
            "https://signin.sandbox.ebay.de/authorize?" +
            "client_id=" + clientId + "&" +
            "redirect_uri=" + ruName + "&" +
            "response_type=code";

        Response.Redirect(authorizationUrl);
        return View();
    }

//我在 Controller 中使用 Test 作为测试结果的方法,请在此处使用您合适的方法

    public ActionResult Test(string code)
    {
        ViewBag.Code = code;

        // Base 64 encode client Id and client secret
        var clientString = clientId + ":" + clientSecret;
        byte[] clientEncode = Encoding.UTF8.GetBytes(clientString);
        var credentials = "Basic " + System.Convert.ToBase64String(clientEncode);

        HttpWebRequest request = WebRequest.Create("https://api.sandbox.ebay.com/identity/v1/oauth2/token")
            as HttpWebRequest;

        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";

        request.Headers.Add(HttpRequestHeader.Authorization, credentials);

        var codeEncoded = HttpUtility.UrlEncode(code);

        var body = "grant_type=authorization_code&code=" + codeEncoded + "&redirect_uri=" + ruName;

        // Encode the parameters as form data
        byte[] formData = UTF8Encoding.UTF8.GetBytes(body);
        request.ContentLength = formData.Length;

        // Send the request
        using (Stream post = request.GetRequestStream())
        {
            post.Write(formData, 0, formData.Length);
        }

        // Pick up the response
        string result = null;
        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
        {
            StreamReader reader = new StreamReader(response.GetResponseStream());
            result = reader.ReadToEnd();
        }

        ViewBag.Response = result;

        return View();
    }

如果您输出 ViewBag.Response,您将看到授权码。玩得开心。

最佳答案

您的重定向网址在沙盒中的表现如何?好像 url 应该是 https。在开发环境的这个阶段,没有带 https 的服务器。你是怎么处理的?

关于c# - 如何通过 OAuth 2.0 从 ebay 获取访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42065909/

相关文章:

c# - 不使用代码隐藏从文本框中删除 'None'

C# DateTime 奇怪的行为

xml - XSLT 从 REST API 转换 XML

ios - Swift 2 中的 Rest json POST 错误处理

swift - SafariViewController : How to grab OAuth token from URL?

iphone - 将 OAuth 添加到 Xcode 项目会导致 Xcode 找不到 Foundation header (随之而来的是大量错误)

c# - 将 ICollection 序列化为 JSON

c# - 如何显示 AspNetUser 表中的密码?

ruby-on-rails - 记录数据更改以进行同步

node.js - 使用 Node 请求 OAuth 凭据