[英]How to replicate Postman POST request in C#
我對 .NET 的 HTTPClient 類相當陌生,因此如果我聽起來像菜鳥,請原諒。 我正在嘗試在 C# .Net 中復制 Postman 的 POST 請求並編寫以下代碼。 但是我沒有得到任何回應,但 StatusCode: 404。有人可以幫助理解我哪里出錯了嗎?
另外我想了解,如何在以下代碼中設置 Body 。
var httpClient = new HttpClient
{
BaseAddress = new Uri("https://testURL.com"),
Timeout = TimeSpan.FromMinutes(10)
};
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("audio/wav"));
httpClient.DefaultRequestHeaders.Add("Authorization", "Basic ldjfdljfdlfjdsjfdsl");
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("model", "Test"),
});
var result = httpClient.PostAsync("api/v1/recognize", content).Result;
這是我在 Postman 中所做的並且它有效:
Postman 中的“參數”是指附加到 URL 的查詢參數。 您將看到 Postman 中的 URL 包含您在“參數”選項卡中添加的參數:
但是,這些似乎只是您輸入的虛擬值,所以也許您不需要它們? 在任何情況下,向HttpClient
請求添加查詢參數的方式都有些不同,因為它需要添加到 URL 中。
之后,您還需要將音頻文件作為內容添加到您的請求中。 目前,您將“Accept”標頭設置為“audio/wav”,但您可能希望改為設置“Content-Type”標頭(或者您是否也希望在響應中返回 WAV 文件?)。
據我所知,這就是你所缺少的:
using (var httpClient = new HttpClient())
{
httpClient.Timeout = TimeSpan.FromMinutes(10);
// Set request headers
httpClient.DefaultRequestHeaders.Add("Authorization", "Basic ldjfdljfdlfjdsjfdsl");
// Set query parameters
var uriBuilder = new UriBuilder("https://testURL.com/api/v1/recognize");
uriBuilder.Query = "model=Test";
// Build request body
// Read bytes from the file being uploaded
var fileBytes = File.ReadAllBytes(wavFilePath);
// Create request content with metadata/headers to tell the
// backend which type of data (media type) is being uploaded
var byteArrayContent = new ByteArrayContent(fileBytes);
byteArrayContent.Headers.ContentType = MediaTypeHeaderValue.Parse("audio/wav");
// Wrap/encode the content as "multipart/form-data"
// See example of how the output/request looks here:
// https://dotnetfiddle.net/qDMwFh
var requestContent = new MultipartFormDataContent
{
{byteArrayContent, "audio", "filename.wav"}
};
var response = await httpClient.PostAsync(uriBuilder.Uri, requestContent);
}
我當然沒有針對您的應用程序測試過這個,但它應該是類似的。 可能是后端不需要“multipart/form-data”而只需要“audio/wav”。 我在您的 Postman 屏幕截圖中看不到輸出標題,但如果是這樣,您可以直接使用byteArrayContent
而不是將其包裝在MultipartFormDataContent
。
注意:不要使用httpClient.PostAsync(...).Result
。 如果你想使用異步方法,你應該await
它。 根據您的代碼,如果您不小心,使用Result
可能會給您帶來問題。 並記得在使用后處理HttpClient
(最簡單的解決方案是使用using
語句)。 如果您計划將HttpClient
用於更多請求,則可以避免在完成之前處理它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.