gpt4 book ai didi

servicestack - 使用 ServiceStack 的 IStreamWriter 和 IHasOptions 进行错误处理

转载 作者:行者123 更新时间:2023-12-04 21:18:50 24 4
gpt4 key购买 nike

使用返回图像/jpeg结果的IStreamWriter和IHasOptions的实现,如果WriteTo发生错误,则不会调用AppHost中的全局错误处理程序,并保留图像/jpeg头,从而导致HTML错误(由ServiceStack生成) ) 带有图像/jpeg HTTP header 。

以下是如何重现此内容的示例:

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"}
};
}
}
}

由于在 WriteTo 之前调用了 Options,因此无法在 WriteTo 内部尝试/捕获并将 Content-Type 更改为例如“application/json”,并手动覆盖错误响应。

如何实现,以便 HTTP 响应具有错误的 Content-Type 值,作为奖励,AppHost 的 ServiceExceptionHandler 被调用以进行记录?

最佳答案

CompressedFileResult class 可能是一个很好的例子,因为它继承了 IStreamWriter 和 IHasOptions。测试中使用的其他一些类也继承自 IStreamWriter( StreamWriterResultImageResult )。不确定这些是否有用。

似乎简单的答案是在调用 'WriteTo' 方法之前完成所有操作(验证、获取图像、构建 byte[] 等)。如果您的 Try/Catch在您的服务中,您可以推送异常并使用已经提供的异常处理。显然,这在 WriteTo 时没有帮助。抛出异常,但此时在 Pipeline看起来你已经通过了响应操作的点。

关于servicestack - 使用 ServiceStack 的 IStreamWriter 和 IHasOptions 进行错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499922/

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