HttpClient 发布异步表单 url 编码和字符串内容不起作用

Ale*_*exB 2 .net c# api asynchronous url-encoding

我正在尝试使用 System.Net.Http.HttpClient PostAsync 方法进行 api 调用。它在 await _httpClient.PostAsync(requestUri, stringContent); 后永远挂起;

HttpClient 配置:

_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));
}
Run Code Online (Sandbox Code Playgroud)

异步后调用:

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();
Run Code Online (Sandbox Code Playgroud)

Ale*_*exB 8

使用 FormUrlEncodedContent 而不是字符串内容解决了我的问题:

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();
Run Code Online (Sandbox Code Playgroud)