DeviceManager/DeviceRepair.Api/Models/CompressedContentResult.cs
2024-06-04 17:25:13 +08:00

47 lines
1.7 KiB
C#

using DeviceRepair.Utils;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Http;
namespace DeviceRepair.Api.Models
{
public class GzipCompressedResult : IHttpActionResult
{
private readonly string _content;
private readonly HttpRequestMessage _request;
public GzipCompressedResult(string content, HttpRequestMessage request)
{
_content = content;
_request = request;
}
public async Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
var response = new HttpResponseMessage(HttpStatusCode.OK);
var contentBytes = Encoding.UTF8.GetBytes(_content);
using (var outputStream = new MemoryStream())
{
using (var gzipStream = new GZipStream(outputStream, CompressionMode.Compress))
{
await gzipStream.WriteAsync(contentBytes, 0, contentBytes.Length, cancellationToken);
}
response.Content = new ByteArrayContent(outputStream.ToArray());
response.Content = new StringContent(System.Convert.ToBase64String(outputStream.ToArray()), Encoding.UTF8, "text/html");
//response.Content.Headers.ContentEncoding.Add("gzip");
//response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
//response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
}
response.RequestMessage = _request;
return response;
}
}
}