c# - WebClient GET 请求失败并显示 401 未经授权

标签 c# api webclient unauthorized

我尝试使用下面的 C# 代码发出 GET api 请求,但失败并显示

System.Net.WebException: The remote server returned an error: (401) Unauthorized.
   at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
   at System.Net.WebClient.DownloadString(Uri address)
   at System.Net.WebClient.DownloadString(String address)
   at Rextester.Program.callAPI()
   at Rextester.Program.Main(String[] args)

请注意,相同的 API 请求通过 postman 工作。 .

private static void callAPI()
{

    WebClient client = new WebClient();
    client.UseDefaultCredentials = false;            

    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

    client.Headers.Add("Authorization", "Basic " + Base64Encode("<id:password>"));            
    client.Headers.Add("Content-Type", "application/json");   
    client.Headers.Add("Environment-Id", "325");

    client.QueryString.Add("query", "%7B%7D");

    string reply = client.DownloadString("https://<server-api-url>");

    Console.WriteLine(reply);
}        


private static string Base64Encode(string plainText)
{
    var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
    var encodedS = System.Convert.ToBase64String(plainTextBytes);
    Console.WriteLine(encodedS);
    return encodedS;
}

另一个奇怪的事实是,我看到在编码字符串之前打印了异常。我应该反过来想。由于方法调用发生在进行 api 调用之前,因此应先打印编码后的字符串。

最佳答案

从 @Panagiotis Kanavos 获得一些指导后,我跟踪了来自 Fiddler 的 api 调用,并了解到 api 调用正在被重定向(http 状态代码 - 307)。默认情况下,C# 客户端配置为不在重定向上传递授权 header 。因此我收到了 401 未经授权的错误。 这是fixed通过添加对 401 状态代码的检查并使用授权 header 重新发送 api 请求。

感谢@Panagiotis Kanavos 的帮助

关于c# - WebClient GET 请求失败并显示 401 未经授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53370591/

相关文章:

java - jni4net 无法在 Java 应用程序中加载 DLL

java - Twilio sdk 不对应 api

C# 可以写入但不能读取存储库的 BitBucket API

c# - WebClient AsyncUpload 进度百分比始终返回 50%

c# - 为什么它总是抛出 ObjectDisposedException?

c# - 如何在Asp.MVC中自动绑定(bind)当前用户

c# - 找出聊天 session 是通过 VPN 连接

c# - 这可以是命名空间或类型别名吗?

java - Google Calendar API V3 批量列表事件

json - 如何从Tumblr API(JSON)中提取数据?