-1

我需要使用一些特定的标头调用客户端 API-HTTPS (GET)

Accept:application/json,application/vnd.error+json
Date:2018-10-03T06:52:48Z
Authorization:<SECRETKEY>

在这种情况下,当我尝试从PostmanAdvanced REST 客户端等客户端调用它时,API 会给出正确的结果。但是我用 C# 代码尝试过同样的事情,它会生成 401-Unauthorized 错误代码。

例如,如果我使用的是 RestSharp (C#) 的邮递员代码。它不适用于我的代码。邮递员截图:
邮递员截图

即使我也对HttpWebRequestHttpClient进行了同样的尝试。但没有运气。

邮递员从代码部分提供的代码如下,其中包含一些我无法公开的机密信息。

var client = new RestClient("https://**CLIENT_API_PATH**");
var request = new RestRequest(Method.GET);
request.AddHeader("Postman-Token", "ef8c2a79-a501-4cef-aa2e-bacdc9d3a922");
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("Authorization", "**SECRET_KEY**");
request.AddHeader("Date", "2018-10-03T06:52:48Z");
request.AddHeader("Accept", "application/json,application/vnd.error+json");
IRestResponse response = client.Execute(request);

在上面的代码中,3 个参数是强制性的,必须传递才能成功调用 API。

  1. 仅限上述格式的日期。

  2. 仅接受上述字符串。

  3. 具有特定身份验证的授权(由客户自定义)。

根据建议的评论,我还添加了来自通话的提琴手数据。

  1. 邮递员请求从提琴手 fiddler screenshot中获取
  2. 来自提琴手fiddler screenshot的 C# api 调用代码请求
  3. C#代码调试结果 visual studio调试截图
4

1 回答 1

0

尝试这个。

public static string Get(Uri uri, string token)
{
    string responseString = string.Empty;
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);

    request.Method = "GET";
    request.ContentType = "application/json;charset=utf-8";
    request.Headers.Add("Authorization", string.Format("Bearer {0}", token));

    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
        using (Stream responseStream = response.GetResponseStream())
        {
            StreamReader responseReader = new StreamReader(responseStream);
            responseString = responseReader.ReadToEnd();
        }
    }
    return responseString;
}
于 2018-10-03T12:19:57.940 回答