ServiceStack 中是否需要 ResponseStatus? [英] Is ResponseStatus needed in ServiceStack?

查看:21
本文介绍了ServiceStack 中是否需要 ResponseStatus?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否需要 ResponseStatus?

wiki 说我们的响应 DTO 中需要有一个 ResponseStatus 属性来处理异常序列化:

https://github.com/ServiceStack/ServiceStack/wiki/Validation

不过看起来 ResponseStatus 是自动生成的,即使响应 DTO 中没有 ResponseStatus 属性.

我们需要 ResponseStatus 属性吗?

解决方案

错误处理文档 解释了如何控制哪些服务返回填充的 ResponseStatus DTO,即:

错误响应类型

抛出异常时返回的错误响应取决于传统命名的 {RequestDto}Response DTO 是否存在.

如果存在:

无论服务方法的响应类型如何,都会返回 {RequestDto}Response.如果 {RequestDto}Response DTO 具有 ResponseStatus 属性,则会填充该属性,否则不会返回 ResponseStatus.(如果你已经用 [DataContract]/[DataMember] 属性修饰了 {ResponseDto}Response 类和属性,那么 ResponseStatus 也需要是装饰,填充).

否则,如果没有:

一个通用的 ErrorResponse 返回一个填充的 ResponseStatus 属性.

服务客户端 透明地处理不同的错误响应类型,并且对于无模式像 JSON/JSV/etc 这样的格式,在自定义或通用 ErrorResponse 中返回 ResponseStatus 之间没有实际明显的区别 - 因为它们都在线路上输出相同的响应.

自定义异常

最终所有的 ServiceStack WebServiceException 都只是带有填充 ResponseStatus 与 HTTP 错误状态一起返回.有多种不同的方法可以自定义返回异常的方式,包括:

启用堆栈跟踪

默认情况下,在响应 DTO 中显示 StackTraces 仅在调试版本中启用,尽管此行为可通过以下方式覆盖:

csharpSetConfig(new HostConfig { DebugMode = true });

Is ResponseStatus needed?

The wiki says that we need to have a ResponseStatus property in our response DTO to handle exception serialization:

https://github.com/ServiceStack/ServiceStack/wiki/Validation

However it looks like ResponseStatus is generated automatically even if there is no ResponseStatus property in the response DTO.

Do we need the ResponseStatus property?

解决方案

The Error Handling Docs explains how you can control which Services return a populated ResponseStatus DTO, i.e:

Error Response Types

The Error Response that gets returned when an Exception is thrown varies on whether a conventionally-named {RequestDto}Response DTO exists or not.

If it exists:

The {RequestDto}Response is returned, regardless of the service method's response type. If the {RequestDto}Response DTO has a ResponseStatus property, it is populated otherwise no ResponseStatus will be returned. (If you have decorated the {ResponseDto}Response class and properties with [DataContract]/[DataMember] attributes, then ResponseStatus also needs to be decorated, to get populated).

Otherwise, if it doesn't:

A generic ErrorResponse gets returned with a populated ResponseStatus property.

The Service Clients transparently handles the different Error Response types, and for schema-less formats like JSON/JSV/etc there's no actual visible difference between returning a ResponseStatus in a custom or generic ErrorResponse - as they both output the same response on the wire.

Custom Exceptions

Ultimately all ServiceStack WebServiceExceptions are just Response DTO's with a populated ResponseStatus that are returned with a HTTP Error Status. There are a number of different ways to customize how Exceptions are returned including:

Enabling StackTraces

By default displaying StackTraces in Response DTOs are only enabled in Debug builds, although this behavior is overridable with:

csharp SetConfig(new HostConfig { DebugMode = true });

这篇关于ServiceStack 中是否需要 ResponseStatus?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆