ServiceStack 中是否需要 ResponseStatus? [英] Is ResponseStatus needed in ServiceStack?
问题描述
是否需要 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.
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).
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屋!