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

标签 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();

使用 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();
    }
}

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

最佳答案

HttpClient 在重定向时丢失了它的 header 。

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

关于带有授权和 JSON 数据的 C# HttpClient 发布 - 401 未经授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59291884/

相关文章:

C# 二进制搜索变体

c# - 创建类实例有多昂贵? (性能考虑)

javascript - 如何将 WebSocket 连接与 Socket.io 事件和 Koa Rest api 结合使用?

java - 将 Java 对象的子集公开给 JSON

rest - 在 DSS 中使用 Base64 编码证书调用服务器签名服务

javascript - Ajax POST XMLHttpRequest() 无法发送带有 & 字符的参数

c# - 我可以使用 MVC 3 在 C# 中使用 Active Directory 进行身份验证吗?

c# - 扩展 .net TabControl 的一些问题

php foreach多个数组超时

flutter - 如何在flutter上使用dio包获取原始请求