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的返回方式,包括:
启用StackTraces
默认情况下,在响应DTO中显示StackTraces仅在调试版本中启用,尽管此行为可以通过以下方式覆盖:
csharp SetConfig(new HostConfig { DebugMode = true });