尝试发送发布请求(在邮递员中工作正常),但在C#中不断收到401未经授权的异常。这是我的代码:
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 ==已正确编码)
答案 0 :(得分:2)
HttpClient在重定向时丢失其标头。
因此,请确保使用正确的API地址。如果您的API不允许不安全的连接,但是您使用“ http://your-api-address.xy/”而不是“ https://your-api-address.xy/”,它将返回重定向,并且客户端将丢失标头。
答案 1 :(得分:0)
请试试这个代码
using (HttpClient client = new HttpClient())
{
var byteArray = Encoding.ASCII.GetBytes("user:passowrd");
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
var response = client.SendAsync(object);
}