问题 ServiceStack中是否需要ResponseStatus?


需要ResponseStatus吗?

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

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

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

我们需要ResponseStatus属性吗?


3936
2017-08-01 00:04


起源



答案:


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

错误响应类型

抛出异常时返回的错误响应因常规命名而异 {RequestDto}Response DTO存在与否。

如果存在:

{RequestDto}Response 无论服务方法的响应类型如何,都会返回。如果 {RequestDto}Response DTO有一个 ResponseStatus 属性,否则填充否则 ResponseStatus 将被退回。 (如果你装饰了 {ResponseDto}Response 类和属性 [DataContract]/[DataMember] 然后是属性 ResponseStatus 也需要装饰,以便人口稠密)。

否则,如果不是:

通用的 ErrorResponse 以填充的方式返回 ResponseStatus 属性。

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

自定义例外

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

启用S​​tackTraces

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

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


12
2017-08-01 00:04



ResponseStatus似乎对C#客户端仍然有用,因为如果您返回成功消息(例如来自RequestFilter),则可以在DTO定义了ResponseStatus时读取它。我不知道使用JsonServiceClient做另一种方法(虽然它会很好)。 - Todd
我还注意到,如果不包含ResponseStatus,则在抛出ArgumentException时,您不会获得HTTP 400的默认异常行为。 - Drew Freyling


答案:


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

错误响应类型

抛出异常时返回的错误响应因常规命名而异 {RequestDto}Response DTO存在与否。

如果存在:

{RequestDto}Response 无论服务方法的响应类型如何,都会返回。如果 {RequestDto}Response DTO有一个 ResponseStatus 属性,否则填充否则 ResponseStatus 将被退回。 (如果你装饰了 {ResponseDto}Response 类和属性 [DataContract]/[DataMember] 然后是属性 ResponseStatus 也需要装饰,以便人口稠密)。

否则,如果不是:

通用的 ErrorResponse 以填充的方式返回 ResponseStatus 属性。

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

自定义例外

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

启用S​​tackTraces

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

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


12
2017-08-01 00:04



ResponseStatus似乎对C#客户端仍然有用,因为如果您返回成功消息(例如来自RequestFilter),则可以在DTO定义了ResponseStatus时读取它。我不知道使用JsonServiceClient做另一种方法(虽然它会很好)。 - Todd
我还注意到,如果不包含ResponseStatus,则在抛出ArgumentException时,您不会获得HTTP 400的默认异常行为。 - Drew Freyling