微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 C# 中向 REST API 调用 (OAuth 1.0) 添加参数会导致 Signature_Invalid (401) 错误

如何解决在 C# 中向 REST API 调用 (OAuth 1.0) 添加参数会导致 Signature_Invalid (401) 错误

我正在尝试从 BrickLink API 获取未完成的订单。我可以连接并授权我的连接,然后返回大量订单。但是,当我尝试向调用添加任何参数时,它会返回 Signature_invalid 错误

private static string GetorderList() {
    // Build the URL.
    var url = urltocall + "/" + actionrequest;

    var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
        httpWebRequest.Method = "GET";
    CreateNonce();    // Prepare the nonce.

    // Build the URL and add the oAuth to it.
    var signatureBaseString = Escape(httpWebRequest.Method.toupper()) + "&";
        signatureBaseString += EscapeUriDataStringRfc3986(url.ToLower()) + "&";
        signatureBaseString += EscapeUriDataStringRfc3986(CreateoAuth());
            /// CreateoAuth generates the oAuth to connect to Bricklink
        CreateSignatureString(signatureBaseString);
        var header = CreateHeaderString();    // Sets up the SHTTP header.

        // Prepare the URL call and get the results from it.
        httpWebRequest.Headers.Add(HttpRequestHeader.Authorization,header);
        var response = httpWebRequest.GetResponse();
        var characterSet = ((HttpWebResponse)response).CharacterSet;
        var responseEncoding = characterSet == ""
            ? Encoding.UTF8
            : Encoding.GetEncoding(characterSet ?? "utf-8");
        var responsestream = response.GetResponseStream();

        if (responsestream == null)
        {
            throw new ArgumentNullException(nameof(characterSet));
        }
        using (responsestream)
        {
            var reader = new StreamReader(responsestream,responseEncoding);
            var result = reader.ReadToEnd();

            Console.WriteLine(@"result: " + result);
            return result;
        }
    }

如果运行上面的代码(显然类中有一些私有方法来准备oAuth和URL等),我们得到了大量的订单返回,这很好。

根据 API 文档 (http://apidev.bricklink.com/redmine/projects/bricklink-api/wiki/OrderMethod#Get-Orders),我们可以向 URL 添加参数以限制返回的记录。我在 url 定义后添加以下行以添加参数。

//      url =+ "?status=PENDING";

当我这样做时,我得到以下响应:

result: {"Meta":{"description":"SIGNATURE_INVALID: Invalid Signature","message":"BAD_OAUTH_REQUEST","code":401}}

如何将参数传递给 API 以使其不会破坏 oAuth?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。