从外部客户端成功调用了API,但没有从c#

时间:2018-10-03 12:06:47

标签: c# api postman rest-client apiclient

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

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

在这种情况下,当我尝试从 Postman Advanced REST client 之类的客户端调用它时,API会给出正确的结果。但是我尝试使用C#代码生成401-未经授权的错误代码的方法也是如此。

例如,如果我将邮递员代码用于RestSharp(C#)。从我的代码中将无法使用。 邮递员截图:
Postman screenshot

即使我也尝试过使用 HttpWebRequest HttpClient 进行相同的操作。但没有运气。

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

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. 来自提琴手的
  3. C#API调用代码请求 fiddler screenshot
  4. C#代码调试结果 visual studio debug screenshot

1 个答案:

答案 0 :(得分: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;
}