[英]How to make HttpClient.PostAsync work the same way as post from Postman?
当我从Postman发布到我的API(以.NET核心编写并在Linux上托管)时,一切都会按预期进行。 当我从代码(使用HttpClient)执行相同操作时,不会发送参数。 在我的代码下面:
var content = new FormUrlEncodedContent(new []
{
new KeyValuePair<string, string>(nameof(userName), userName),
new KeyValuePair<string, string>(nameof(serialNumber), serialNumber)
});
var result = await _httpClient.PostAsync(_uri, content).ConfigureAwait(false);
var json = await result.Content.ReadAsStringAsync().ConfigureAwait(false);
return JsonConvert.DeserializeObject<Response>(json);
我认为应该发送内容,并且应该一切正常。 我发现Wireshark中的调用之间存在显着差异。
Postman的工作POST: 来自HttpClient的POST无法正常工作:
。
如何确保我的HttpClient.PostAsync正确发送数据?
邮递员版本没有正文,但是它的userName
和serialNumber
编码为url作为查询参数。
为了使用HttpClient
实现相同的功能,您需要将这些参数添加到url中。
var uriBuilder = new UriBuilder(_uri);
// If you already have query parameters, this code will preserve them.
// Otherwise you can just create a new NameValueCollection instance.
var parameters = HttpUtility.ParseQueryString(uriBuilder.Query);
parameters[nameof(userName)] = userName;
parameters[nameof(serialNumber)] = serialNumber;
uriBuilder.Query = parameters.ToString();
// Pass null as HttpContent to make HttpClient send an empty body
var result = await _httpClient.PostAsync(uriBuilder.ToString(), null).ConfigureAwait(false);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.