ServiceStack中是否需要ResponseStatus?

需要ResponseStatus吗?

维基说我们需要在响应DTO中有一个ResponseStatus属性来处理exception序列化:

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

但是,即使响应DTO中没有ResponseStatus属性,也会自动生成ResponseStatus。

我们需要ResponseStatus属性吗?

error handling文档解释了如何控制哪些服务返回填充的ResponseStatus DTO,即:

错误响应类型

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

如果存在:

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

否则,如果不是:

ErrorResponse一个通用的ErrorResponse ,其中包含一个填充的ResponseStatus属性。

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

自定义例外

最终,所有ServiceStack WebServiceExceptions都只是Response DTO,其中包含一个填充的ResponseStatus ,它返回HTTP错误状态。 有许多不同的方法可以自定义exception的返回方式,包括:

启用S​​tackTraces

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

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