Web API-设置响应.字节为[]/MemoryStream内容的内容工作不正常



我的要求是使用Web API在网络上发送一个zip文件(依次由一堆文件组成),该文件不应写入本地任何位置(不应写入服务器/客户端磁盘上的任何位置)。对于压缩,我使用DotNetZip-Ionic.Zip.dll

服务器代码:

public async Task<IHttpActionResult> GenerateZip(Dictionary<string, StringBuilder> fileList)
    { 
// fileList is actually a dictionary of “FileName”,”FileContent”
        byte[] data;
        using (ZipFile zip = new ZipFile())
        {
            foreach (var item in filelist.ToArray())
            {
                zip.AddEntry(item.Key, item.Value.ToString());
            }
            using (MemoryStream ms = new MemoryStream())
            {
                zip.Save(ms);
                data = ms.ToArray();
            }            
        }
        var result = new HttpResponseMessage(HttpStatusCode.OK);
        MemoryStream streams = new MemoryStream(data);
        //, 0, data.Length-1, true, false);
        streams.Position = 0;
        //Encoding UTFEncode = new UTF8Encoding();
        //string res = UTFEncode.GetString(data);
        //result.Content = new StringContent(res, Encoding.UTF8, "application/zip");
        <result.Content = new StreamContent(streams);
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/zip");
        //result.Content.Headers.ContentLength = data.Length;
        result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
        result.Content.Headers.ContentDisposition.FileName = "test.zip";
        return this.Ok(result);
    }

我面临的问题是,在客户端下载的zip文件被修改为test.bin后,其流内容(本例中的byte[]数据)丢失。(我正在返回一个test.zip文件。当我在本地将文件从test.zip更改为test.bin时,我看到该文件的内容如下所示。它不包含Response.Content值。附言:我也尝试过MIME类型的"application/octet stream"。运气不好!)

Test.zip又名Test.bin的内容:

{"版本":{"主要":1,"次要":1、"内部版本":-1,"修订":-1、"主要修订":-1、"次要修订":1},
"content":{"headers":[{"key":"content Type","value":["application/zip"]},
{"key":"Content Disposition","value":["attachment;filename=test.zip"]}},
"状态代码":200,"reasonPhrase":"OK","headers":[],"isSuccessStatusCode":true}

有人能帮我制定结果吗。带有MemoryStream对象的内容(我在谷歌上的其他地方看到过"FileStream"设置"result.Content"的例子,但我只想使用MemoryStream!) 我之所以强调这一点,是因为我认为问题在于将MemoryStream对象设置为结果。内容(为了将流内容正确保存到result.Content对象中)

附言:我还通过AngularJS和ASP.NET Web API上传/下载了字节数组(以及其他一些链接),但这对我没有太大帮助…:(非常感谢您的帮助。提前感谢:)

我的问题解决了!!

我所做的只是将响应类型更改为HttpResponseMessage,并在最后一行使用"return result"而不是Ok(result){即HttpResponceMessage类型而不是OKNegiotatedContentResult类型)

相关内容

最新更新