处理多部分(JSON +字节流)在C#中发布请求

时间:2016-06-26 19:20:25

标签: c# .net audio multipart

我有一个ASP.NET应用程序,其背后的代码服务于多部分POST请求,由两部分组成:JSON和代表音频的字节流。 POST主体看起来像这样:

--8f2a0a01-2114-42ca-a176-51badb488534
Content-Type: application/json; charset=utf-8
Content-Disposition: form-data; name=jsonName
{JSON}
--8f2a0a01-2114-42ca-a176-51badb488534
Content-Type: audio/wav
Content-Disposition: form-data; name=audioName
(byte stream)
--8f2a0a01-2114-42ca-a176-51badb488534

我的问题是从第二部分(音频)检索字节流。我已经尝试了几种技术,我使用的任何API都将这个字节流作为字符串返回给我,在此之后,当我将其序列化为文件时,文件无法播放。例如(但不仅仅):

foreach (string key in HttpContext.Current.Request.Form.AllKeys)
{
var multiPartValue = HttpContext.Current.Request.Form[key];
//DO SOMETHING
}

我得出结论,转换为字符串会破坏原始音频字节流,我需要按原样检索原始字节流(可能是byte [])而不进行任何转换。任何关于如何实现这一点的建议都将非常感激

1 个答案:

答案 0 :(得分:0)

这可能有用(如果没有适当的客户端代码,则无法测试):

var content = new StreamContent(Request.InputStream);
    content.Headers.ContentType =
        System.Net.Http.Headers.MediaTypeHeaderValue.Parse(
            "multipart/form-data; 8f2a0a01-2114-42ca-a176-51badb488534");

    var streamProvider = content.ReadAsMultipartAsync().Result;

    foreach (var contentPart in streamProvider.Contents)
    {
        if (contentPart.Headers.ContentType.MediaType == "audio/wav")
        {
            var bytes = contentPart.ReadAsByteArrayAsync().Result;
        }
    }

您需要安装Microsoft.AspNet.WebApi.Client包