gpt4 book ai didi

c# - ServiceStack 流压缩

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:41 25 4
gpt4 key购买 nike

我正在从 ServiceStack 服务返回数据流,如下所示。请注意,我需要这样做而不是概述的方式 here因为我需要在数据写入输出流后执行一些清理工作。

using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
fs.WriteTo(Response.OutputStream);
}
Response.EndRequest();
...cleanup code...

压缩在其他服务中处理,这些服务通过使用类似于 this answer 的 ServiceRunner 返回简单的 DTO。 .然而,上面的流响应永远不会命中该代码,因为 OnAfterExecute 中的响应对象始终为 null。我可以在服务方法中手动压缩结果,如下所示,但它需要大量设置来确定是否需要压缩以及需要什么压缩,并手动设置正确的 HTTP header (下面省略)。

var outStream = new MemoryStream();
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
using (var tinyStream = new GZipStream(outStream, CompressionMode.Compress))
{
fs.CopyTo(tinyStream);
outStream.WriteTo(Response.OutputStream);
}
Response.EndRequest();
...cleanup code...

ServiceStack 中有没有一种方法可以像 ServiceRunner 那样为我处理这种压缩?

最佳答案

我不太确定您喜欢 ServiceStack 在 ServiceRunner 中处理压缩的方式。是因为它在 ServiceStack API 中是全局的吗?

对于你的例子,我认为像下面这样的东西可以满足你在数据写入输出流后执行一些清理的需要......

public class FStreamService : Service
{
public object Get(FStream request)
{
var filePath = @"c:\test.xml";
var compressFileResult = new CompressedFileResult(filePath); //CompressedResult in ServiceStack.Common.Web.CompressedFileResult
compressFileResult.WriteTo(Response.OutputStream);
Response.EndRequest();
// ...cleanup code...
}
}

基于上面的评论更新,使用一些 ServiceStack 扩展添加压缩

public object Get(FStream request)
{
var filePath = @"c:\test.xml";
using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
var compressedBtyes = fs.ToUtf8String().Compress(this.RequestContext.CompressionType);
new CompressedResult(compressedBtyes).WriteTo(Response.OutputStream);
}
Response.EndRequest();
// ...cleanup code...
}

如果你想在 ServiceRunner 中使用它,像这样的东西应该可以工作......

public override object OnAfterExecute(IRequestContext requestContext, object response)
{
var resp = requestContext.Get<IHttpResponse>();
response = requestContext.ToOptimizedResult(requestContext.Get<IHttpResponse>().OutputStream);

return base.OnAfterExecute(requestContext, response);
}

<罢工>

关于c# - ServiceStack 流压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18836441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com