且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

在Web Api中将Zip文件作为响应返回

更新时间:2023-02-15 11:01:49

public HttpResponseMessage Post()
    {
        var ch = new ClientHandler();
        using (MemoryStream rms = new MemoryStream(Request.Content.ReadAsByteArrayAsync().Result))
        {
            using (GZipStream unzip = new GZipStream(rms, CompressionMode.Decompress))
            {
                ch.Requests = XElement.Load(unzip);
            }
        }

        MemoryStream outstream = new MemoryStream();
        try
        {
            ch.Start();
            using (GZipStream zip = new GZipStream(outstream, CompressionMode.Compress, true))
            {
                ch.Responses.Save(zip);
            }
        }
        catch (Exception ex)
        {
            XElement responses = new XElement("Responses");
            responses.Add(new XElement("Error", ex.Message));
            using (GZipStream zip = new GZipStream(outstream, CompressionMode.Compress, true))
            {
                responses.Save(zip);
            }
        }
        finally
        {
            ch.Dispose();
        }
        outstream.Position = 0;

        HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
        result.Content = new StreamContent(outstream);
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        return result;
    }