ServiceStack服务中是否有任何机制可以返回流/大二进制数据?WCF的MTOM支持很难但在返回大量数据时却没有文本转换开销.
rus*_*der 18
我喜欢服务堆栈,这个litle代码足以从内存流中返回Excel报告
public class ExcelFileResult : IHasOptions, IStreamWriter
{
private readonly Stream _responseStream;
public IDictionary<string, string> Options { get; private set; }
public ExcelFileResult(Stream responseStream)
{
_responseStream = responseStream;
Options = new Dictionary<string, string> {
{"Content-Type", "application/octet-stream"},
{"Content-Disposition", "attachment; filename=\"report.xls\";"}
};
}
public void WriteTo(Stream responseStream)
{
if (_responseStream == null)
return;
_responseStream.WriteTo(responseStream);
responseStream.Flush();
}
}
Run Code Online (Sandbox Code Playgroud)
myt*_*thz 16
从鸟瞰角度来看,ServiceStack可以返回以下任何一个:
以下类型未转换并直接写入响应流:
application/octet-stream内容类型.除了返回普通的C#对象之外,ServiceStack还允许您返回任何Stream或IStreamWriter(这对您写入响应流的方式更加灵活):
public interface IStreamWriter
{
void WriteTo(Stream stream);
}
Run Code Online (Sandbox Code Playgroud)
两者都允许您直接写入Response OutputStream而无需任何额外的转换开销.
如果要在同一时间自定义HTTP标头,只需要实现IHasOptions,其中任何字典条目都写入Response HttpHeaders.
public interface IHasOptions
{
IDictionary<string, string> Options { get; }
}
Run Code Online (Sandbox Code Playgroud)
除此之外,IHttpResult允许甚至更精细地控制HTTP输出,您可以在其中提供自定义Http响应状态代码.您可以参考HttpResult对象的实现,以实现上述接口的实际实现.
| 归档时间: |
|
| 查看次数: |
9382 次 |
| 最近记录: |