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