Требуется ли 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 });