Is ResponseStatus needed in ServiceStack?

2020-02-05 19:10发布

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?

1条回答
▲ chillily
2楼-- · 2020-02-05 19:47

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.

If it exists:

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).

Otherwise, if it doesn't:

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 });

查看更多
登录 后发表回答