繁体   English   中英

如何使HttpClient.PostAsync与Postman的发布方式相同?

[英]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: 邮递员的工作POST 来自HttpClient的POST无法正常工作: 来自HttpClient的POST无法正常工作

如何确保我的HttpClient.PostAsync正确发送数据?

邮递员版本没有正文,但是它的userNameserialNumber编码为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM