您好我正在编写Windows Phone 8.1应用程序,在此应用程序中我需要向Sonic API服务器发送请求,该请求应包含access_id(字符串)格式(字符串)和input_file(mp3文件),我一直坚持将文件和字符串放在一个请求中:这是我尝试过的:
public async static Task<string> RequestSong(StorageFile mp3File, string responseFormat)
{
try
{
using (var webClient = new HttpClient())
{
using (var form = new MultipartFormDataContent())
{
var mp3FileByteArray = await readBytesFromStorageFile(mp3File);
form.Add(new StringContent(ApiAccessId), "access_id");
form.Add(new StringContent(responseFormat), "format");
form.Add(new ByteArrayContent(mp3FileByteArray, 0, mp3FileByteArray.Count()), "input_file", mp3File.Name);
HttpResponseMessage responseMessage = await webClient.PostAsync(ApiAccessUrl, form);
//responseMessage.EnsureSuccessStatusCode();
string responseString = responseMessage.Content.ReadAsStringAsync().Result;
return responseString;
}
}
}
catch (Exception e)
{
//handle this
}
return "";
}
请求成功执行但是它说access_id丢失或错误,access_id用于访问sonic API并且每个用户都有一个唯一的,这我无法工作,因为参数access_id和format放在请求中错误的内容类型(只是猜测)。因为如果我把字符串放在formUrlEncodedContent中,它工作正常,但我无法使用FormUrlEncodedContent上传文件。
有什么方法可以在同一个请求中发送文件和字符串吗?
BTW它的System.NET.Http命名空间。
答案 0 :(得分:1)
您的access_id应作为查询字符串参数发送到您的网址。
ApiAccessUrl += "?access_id=" + ApiAccessId;
删除以下行:
form.Add(new StringContent(ApiAccessId), "access_id");