C# c语言中的voicebaseapi#

C# c语言中的voicebaseapi#,c#,asp.net-mvc,api,C#,Asp.net Mvc,Api,我正在研究如何使用API上传媒体文件。我尝试使用HttpClient(带有MultipartFormDataContent和FormUrlEncodedContent)、RestClient、WebClient和WebRequest。但它不起作用 以下是我尝试的代码: var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer",

我正在研究如何使用API上传媒体文件。我尝试使用HttpClient(带有MultipartFormDataContent和FormUrlEncodedContent)、RestClient、WebClient和WebRequest。但它不起作用

以下是我尝试的代码:

var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "xxxx");
MultipartFormDataContent form = new MultipartFormDataContent();
form.Add(new StringContent("http:/xx.mp3"), "media", "testFile.mp3");
HttpResponseMessage response = await client.PostAsync("https://apis.voicebase.com/v2-beta/media", form);
HttpContent responseContent = response.Content;
using (var reader = new StreamReader(await responseContent.ReadAsStreamAsync()))
{
   var a = reader.ReadToEndAsync();
   return response;
}
API返回此错误:

"status": 400,
"errors": 
  {
    "error": "We have identified 1 error in your request: (1) Your upload was rejected because the media file not be successfully parsed (80 bytes )."
  },
"reference": "3D00BCA8:A910_0A40E32A:01BB_5949122A_69009:79C6"
}
编辑

我也尝试过使用二进制数据:

var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "xxxx");
MultipartFormDataContent form = new MultipartFormDataContent();
form.Add(new ByteArrayContent(File.ReadAllBytes(@"C:\Users\xxxx.mp3")), "media", "xxxx.mp3");
HttpResponseMessage response = await client.PostAsync("https://apis.voicebase.com/v2-beta/media", form);
HttpContent responseContent = response.Content;
using (var reader = new StreamReader(await responseContent.ReadAsStreamAsync()))
{
    var a = reader.ReadToEndAsync();
    return response;
}
使用二进制数据时,我遇到以下错误:

{
"status": 400,
"errors": 
{
"error": "We have identified 1 error in your request: (1) We could not download the URL"
}
,
"reference": "3D00BCA8:DFF5_0A40E32A:01BB_59491448_6F33E:79C6"
}

form.Add(…)
的第一个参数需要是实际文件内容的数据流,而不是字符串。为此,您可以创建一个新的内存流,如下所示:
newmemorystream(File.ReadAllBytes(localfilePath))
尝试以下操作:

var content = new StreamContent(new FileStream(@"C:\Users\xxxx.mp3", FileMode.Open));
content.Headers.ContentType = new MediaTypeHeaderValue("audio/mp3");

MultipartFormDataContent form = new MultipartFormDataContent();
form.Add(content, "media", "xxxx.mp3");

我今天需要这样做,所以我尝试将我在V3 API上的工作总结到一个nuget包中:


当我得到时间时,我也会在GitHub上得到它

如果使用V3,您可以使用自己喜欢的语言大摇大摆地生成客户机代码

为什么要以字符串形式发送mp3?这可能是二进制数据。更不用说,你实际上是在发送一个字符串。。。不是真正的mp3Oops抱歉@JoePhillips我复制粘贴了不同的代码。我试过使用二进制数据,但因为它不起作用,所以我试过使用字符串。@JoePhillips我已经编辑了我的问题,以包含二进制数据示例。请仔细查看并尝试删除filename参数