ServiceStack无法获得真正的异常消息

时间:2016-12-27 09:22:25

标签: exception servicestack

服务器端

public class MyServices : Service { public object Get(Hello request) { throw new InvalidOperationException("test error message"); //return new HelloResponse { Result = "Hello, {0}!".Fmt(request.Name) }; } }

客户端

try { var client = new JsonServiceClient("http://localhost:28586/"); var response = client.Get<HelloResponse>(new Hello { Name = "DHJ" }); } catch (WebServiceException ex) { // ex.ErrorCode = "InvalidOperationException" // No Problem. // ex.ErrorMessage = null // always null. Why? }

我看到ServiceStack的文档如下:

  

抛出C#异常

     

在大多数情况下,您不需要关心ServiceStack的错误处理,因为它为抛出C#异常的正常用例提供本机支持,例如:

     

公共对象帖子(用户请求)   {       if(string.IsNullOrEmpty(request.Name))           抛出新的ArgumentNullException(&#34; Name&#34;);   }   HTTP错误的C#异常的默认映射

     

默认C#例外:

     

返回继承自ArgumentException的HTTP StatusCode为400 BadRequest   NotImplementedException或NotSupportedException作为405 MethodNotAllowed返回   AuthenticationException以401 Unauthorized身份返回   UnauthorizedAccessException以403 Forbidden的形式返回   OptimisticConcurrencyException返回为409 Conflict   其他正常的C#异常作为500 InternalServerError返回   可以使用Config.MapExceptionToStatusCode上的用户定义映射扩展此列表。

1 个答案:

答案 0 :(得分:1)

您的HelloResponse课程需要Error Handling docs中的ResponseStatus媒体资源:

错误响应类型

抛出异常时返回的错误响应取决于是否存在常规命名的{RequestDto}Response DTO。

如果存在:

无论服务方法的响应类型如何,都会返回{RequestDto}Response。如果{RequestDto}Response DTO具有 ResponseStatus 属性,则会填充该属性,否则将不会返回 ResponseStatus 。 (如果您使用{ResponseDto}Response属性修饰了[DataContract]/[DataMember]类和属性,那么 ResponseStatus 也需要进行修饰,以便填充。

否则,如果它不是:

通过填充 ResponseStatus 属性返回通用ErrorResponse