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

问题描述 投票:0回答:1

我正在尝试使用

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));
}

PostAsync 调用:

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();
c# .net asynchronous urlencode
1个回答
14
投票

使用 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();
© www.soinside.com 2019 - 2024. All rights reserved.