带有授权和 JSON 数据的 C# HttpClient Post - 401 未经授权

Pet*_*zak 3 c# rest post

尝试发送 post 请求(在 postman 中工作正常),但在 C# 中不断收到 401 Unauthorized 异常。这是我的代码:

var httpClient = new HttpClient();
var creds = string.Format("{0}:{1}", "username", "password");
var basicAuth = string.Format("Basic {0}", Convert.ToBase64String(Encoding.UTF8.GetBytes(creds)));
httpClient.DefaultRequestHeaders.Add("Authorization", basicAuth);

var requestMessage = new HttpRequestMessage(HttpMethod.Post, url);
requestMessage.Content = new StringContent(postData, Encoding.UTF8, "application/json");
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Basic", "encodedValue==");

var post = httpClient.SendAsync(requestMessage);
post.Wait();
Run Code Online (Sandbox Code Playgroud)

使用 HttpWebRequest 时也会发生同样的事情:

var webReq = (HttpWebRequest)WebRequest.Create(url);
webReq.Headers.Add("Authorization","Basic encodedValue==");
webReq.Method = "POST";
webReq.ContentType = "application/json";

try
{
    using (var streamWriter = new StreamWriter(webReq.GetRequestStream()))
    {
        streamWriter.Write(json);
        streamWriter.Flush();
        streamWriter.Close();
    }

    var httpResponse = (HttpWebResponse)webReq.GetResponse();
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
    {
        response = streamReader.ReadToEnd();
    }
}
Run Code Online (Sandbox Code Playgroud)

有人知道我可以尝试什么吗?PS(encodedValue==编码正确)

小智 7

HttpClient 在重定向时会丢失其标头。

因此,请确保您使用正确的 API 地址。如果您的 API 不允许不安全连接,但您使用“ http://your-api-address.xy/ ”而不是“ https://your-api-address.xy/ ”,它将返回重定向,并且您的客户端丢失标题。

  • 您好,这是正确的,所以实际发生的情况是“https:/url”被重定向到“https:/url/”,并且在此操作期间标头丢失。我关闭了 Postman 中的自动重定向,如下所述:/sf/ask/3973411291/ 然后遵循显示的响应 - 我发现末尾有“/”!:) 谢谢 (2认同)