簡體   English   中英

如何在 C# 中復制 Postman POST 請求

[英]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 包含您在“參數”選項卡中添加的參數:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM