簡體   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