Проблемы с данными POST в API с помощью HttpClient

В моем коде отображается следующая ошибка: "Ошибка: 401 Not Authorized" при отправке данных.

Мои занятия:

public class APICommands : IDisposable
{
 public APICommands()
 {
 this.HttpClientHandler = new HttpClientHandler();

 // Set authentication.
 this.HttpClientHandler.UseDefaultCredentials = false;
 this.HttpClientHandler.Credentials = new NetworkCredential("[removed_email]", "mypassword");

 this.HttpClient = new HttpClient(this.HttpClientHandler);

 this.HttpClient.BaseAddress = new Uri("https://api.myhost.com");

 this.HttpClient.DefaultRequestHeaders.Accept.Clear();
 this.HttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
 }

 private HttpClient HttpClient { get; set; }

 private HttpClientHandler HttpClientHandler { get; set; }

 public async Task<jsonresultboleto> CreateClient(string name, string age)
 {
 ServicePointManager.Expect100Continue = false;

 var postData = new List<************<string, string="">>();
 postData.Add(new ************<string, string="">("name", name));
 postData.Add(new ************<string, string="">("age", age));

 HttpContent content = new FormUrlEncodedContent(postData);

 // When I call this method "PostAsync", the error message is displayed.
 HttpResponseMessage response = await this.HttpClient.PostAsync("https://api.myhost.com/client/", content);

 if (response.IsSuccessStatusCode)
 {
 // Do something.
 }

 return null;
 }
}
</string,></string,></************<string,></jsonresultboleto>

Ошибка началась, когда я добавил этот код: ServicePointManager.Expect100Continue = false; , Я добавил этот код для устранения другой ошибки: "417 - Expectation Failed" :(

Что ты собираешься делать?

Благодаря...

2 ответа

Похоже, механизм аутентификации не отвечает на 401 - Unauthorized ответ. Вы можете добавить параметр PreAuthenticate в HttpClientHandler, чтобы принудительно отправлять учетные данные во время первоначального запроса, а не ждать вызова авторизации.

...
// Set authentication.
this.HttpClientHandler.UseDefaultCredentials = false;
this.HttpClientHandler.Credentials = new NetworkCredential("[removed_email]", "mypassword");
this.HttpClientHandler.PreAuthenticate = true;


Я считаю, что ServicePointManage.Expect100Continue не требуется. Я предполагаю, что учетные данные не работают.

Почему бы не попробовать его с помощью заголовков авторизации:

string authInfo = "[removed_email]:mypassword";
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authInfo);

licensed under cc by-sa 3.0 with attribution.