ServiceStack中是否需要ResponseStatus?

时间:2012-08-01 00:04:19

标签: c# error-handling servicestack

需要ResponseStatus吗?

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

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

然而,即使响应DTO中没有ResponseStatus属性,看起来也会自动生成ResponseStatus。

我们需要ResponseStatus属性吗?

1 个答案:

答案 0 :(得分:12)

Error Handling Docs解释了如何控制哪些服务返回已填充的ResponseStatus DTO,即:

错误响应类型

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

如果存在:

无论服务方法的响应类型如何,都会返回{RequestDto}Response。如果{RequestDto}Response DTO具有 ResponseStatus 属性,则会填充该属性,否则将不会返回 ResponseStatus 。 (如果您使用{ResponseDto}Response属性修饰了[DataContract]/[DataMember]类和属性,那么 ResponseStatus 也需要进行修饰,以便填充。

否则,如果不是:

通过填充 ResponseStatus 属性返回通用ErrorResponse

Service Clients透明地处理不同的错误响应类型,对于无模式格式(如JSON / JSV / etc),在自定义或通用中返回 ResponseStatus 之间没有实际的明显区别ErrorResponse - 因为它们都在线上输出相同的响应。

自定义例外

最终,所有ServiceStack WebServiceExceptions都只是具有填充的ResponseStatus的响应DTO,它们返回HTTP错误状态。有许多不同的方法可以自定义异常的返回方式,包括:

启用StackTraces

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

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