[英]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.