Требуется ли ResponseStatus в ServiceStack?

Требуется ли ResponseStatus?

Вики говорит, что нам нужно иметь свойство ResponseStatus в нашем ответе DTO для обработки сериализации исключений:

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

Однако похоже, что ResponseStatus генерируется автоматически, даже если в ответе DTO нет свойства ResponseStatus.

Нужно ли свойство ResponseStatus?

Ответ 1

"Документация по обработке ошибок" объясняет, как вы можете контролировать, какие службы возвращают заполненный ResponseStatus DTO, i.e:

Типы ответов об ошибках

Ответ на ошибку, который возвращается при возникновении исключения, зависит от того, существует или нет условно названный {RequestDto}Response DTO.

Если он существует:

Возвращается {RequestDto}Response, независимо от типа ответа метода обслуживания. Если {RequestDto}Response DTO имеет свойство ResponseStatus, он заселен, иначе no ResponseStatus будет возвращен. (Если вы декорировали класс {ResponseDto}Response и свойства с атрибутами [DataContract]/[DataMember], тогда ResponseStatus также нужно украсить, чтобы заполнить).

В противном случае, если это не так:

Общий ErrorResponse возвращается с заполненным свойством ResponseStatus.

Клиенты служб прозрачно обрабатывают разные типы ответов об ошибках, а для форматов без схемы, таких как JSON/JSV/etc, нет фактических видимых разница между возвратом ResponseStatus в пользовательском или общем ErrorResponse - поскольку оба они выдают один и тот же ответ на провод.

Пользовательские исключения

В конечном итоге все ServiceStack WebServiceExceptions являются только Response DTO с заполненным ResponseStatus, которые возвращаются с статусом ошибки HTTP. Существует несколько способов настройки возврата исключений, включая:

Включение StackTraces

По умолчанию отображение StackTraces в Response DTO включено только в сборках Debug, хотя это поведение можно преодолеть с помощью:

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