使用返回image/jpeg结果的IStreamWriter和IHasOptions的实现,如果WriteTo中发生错误,则不调用AppHost中的全局错误处理程序,并且image/jpeg标头保留,这会导致HTML错误(由ServiceStack生成) )使用image/jpeg HTTP标头.
这是一个如何重现这个的例子:
public class SampleStreamWriter : IStreamWriter, IHasOptions
{
void WriteTo(Stream responseStream)
{
// This would actually be a delegate
throw new ApplicationException("...");
}
public IDictionary<string, string> Options
{
get
{
return new Dictionary<string, string>
{
{HttpHeaders.ContentType, "image/jpeg"}
};
}
}
}
Run Code Online (Sandbox Code Playgroud)
由于在WriteTo之前调用Options,因此无法在WriteTo中尝试/ catch并将Content-Type更改为例如"application/json",并手动覆盖错误响应.
如何实现这一点,以便HTTP响应具有错误的Content-Type值,并且作为奖励,AppHost的ServiceExceptionHandler被调用以进行日志记录?
CompressedFileResult类可能是一个很好的示例,因为它继承了 IStreamWriter 和 IHasOptions 。测试中使用的其他一些类也继承自 IStreamWriter(StreamWriterResult、ImageResult)。不确定这些是否有用。
看起来简单的答案是byte[]在调用“WriteTo”方法之前完成所有操作(验证、获取图像、构建等)。如果您Try/Catch在您的服务中,您可以将异常上推并使用已提供的异常处理。WriteTo显然,这在引发异常时没有帮助,但在管道中的这一点上,您似乎已经通过了响应操作点。
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |