13

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?

mythz
  • 141,670
  • 29
  • 246
  • 390

1 Answers1

12

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

mythz
  • 141,670
  • 29
  • 246
  • 390
  • ResponseStatus still appears to be useful for C# clients, because if you return a success message, such as from a RequestFilter, you can read it if your DTO has ResponseStatus defined. I don't know of another way to do this using JsonServiceClient (though it would be nice). – Todd Mar 11 '13 at 01:06
  • I've also noticed if you don't include the ResponseStatus you don't get the default exception behaviour of a HTTP 400 when an ArgumentException is thrown. – Drew Freyling Nov 04 '13 at 22:58