【问题标题】:Calling Api with header, username and password in C#在 C# 中使用标头、用户名和密码调用 Api
【发布时间】:2019-07-08 18:42:22
【问题描述】:

我正在尝试从此 api codaBox 获取数据 我已经用swagger 测试过了 但是当我尝试使用 时,我收到错误代码 401。我使用了正确的标题、用户名和密码。

我使用swagger 使用相同的凭据对其进行了测试,并且我已经获得了数据。

try
{
    var byteArray = Encoding.ASCII.GetBytes("Username:password");
    Client.DefaultRequestHeaders.Authorization =
        new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
    Client.BaseAddress = new Uri("https://myurl");

    Client.DefaultRequestHeaders.Add("X-Software-Company", "myToken");
    HttpResponseMessage response = await Client.GetAsync("");
    response.EnsureSuccessStatusCode();
    string responseBody = await response.Content.ReadAsStringAsync();
    // Above three lines can be replaced with new helper method below
    // string responseBody = await client.GetStringAsync(uri);

    Console.WriteLine(responseBody);
}
catch (HttpRequestException e)
{
    Console.WriteLine("\nException Caught!");
    Console.WriteLine("Message :{0} ", e.Message);
}

我想获得 200 个状态码。

【问题讨论】:

  • 你试过设置用户代理吗?如果您不这样做,这通常会导致一些问题
  • 还可以使用诸如 wireshark/fiddler 之类的工具检查浏览器中的成功登录尝试,这可能会帮助您使您的自动化代码正常工作。
  • 在调用EnsureSuccessStatusCode 之前,您至少应该阅读某些状态代码的响应正文。大多数 OAuth 提供程序在响应正文中提供错误消息。
  • 你比较过你的载体了吗?
  • 您是否尝试在 Postman 中测试 API 调用?如果你让它在那里工作,邮递员可以为你打电话。

标签: c# c# httpclient


【解决方案1】:

您需要将"Username:password" 替换为实际的用户名和密码,以"{your actual username}:{your actual password}" 分隔

Web 也是 UTF8(Ascii 有时作为其子集工作)但并非总是如此:

var byteArray = Encoding.UTF8.GetBytes("Username:password");

【讨论】:

  • 当然我做到了,我只是不想在互联网上分享我的密码和用户名 -)
  • @bobnkusi 我明白了,然后看看我的编辑。换成 UTF8 试试
  • 您的示例是使用基本身份验证的正确方法。我认为您需要仔细检查发送的所有内容是否正确。尝试使用 Fillder 或其他工具。
  • 或者您可以使用日志处理程序来查看确切的请求。请参阅此处的示例:stackoverflow.com/questions/18924996/…
猜你喜欢
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
相关资源
最近更新 更多