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

标签 servicestack

使用返回图像/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/

相关文章:

web-services - 记录 ServiceStack Web 服务

.net - 无法使用 HTTPS 使 ServiceStack 在 IIS6 中工作

authentication - 经过身份验证的 ServiceStack.Redis.PooledRedisClientsManager

c# - ServiceStack - 使用内置身份验证功能时访问请求 DTO?

servicestack - 使用 ServiceStack 客户端时,为什么我的 ServiceStack 服务会收到 401 响应

Servicestack 客户端/文本许可

redis - 为什么 Redis Pub/Sub 不允许在回调中访问 Redis?

c# - Servicestack ormlite 错误中的计算字段

c# - 无法加载文件或程序集 'ServiceStack' 或其依赖项之一。该系统找不到指定的文件

web-services - 使用 ServiceStack 实现 HATEOAS 的正确方法