I am trying to use System.Net.Http.HttpClient PostAsync
method to make an API call. It hangs forever after await _httpClient.PostAsync(requestUri, stringContent);
.
HttpClient configuration :
_httpClient = new System.Net.Http.HttpClient(new HttpClientHandler
{
UseDefaultCredentials = WithDefaultCredentials,
AllowAutoRedirect = false
});
_httpClient.DefaultRequestHeaders.Accept.Clear();
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(APPLICATION_JSON));
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(ApplicationXWwwFormUrlencoded));
if (!string.IsNullOrEmpty(CultureInfo.CurrentUICulture.Name))
{
_httpClient.DefaultRequestHeaders.AcceptLanguage.Add(new
StringWithQualityHeaderValue(CultureInfo.CurrentUICulture.Name));
}
PostAsync call :
var stringContent = new StringContent(content);
stringContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
var response = await _httpClient.PostAsync(requestUri, stringContent);
var responseContent = await response.Content.ReadAsStringAsync();
Using FormUrlEncodedContent instead of string content fixed my problem :
var requestContent = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("password", password),
new KeyValuePair<string, string>("username", username),
// ...
});
var response = await _httpClient.PostAsync(requestUri, requestContent);
var responseContent = await response.Content.ReadAsStringAsync();