ServiceStack不会填充错误响应

时间:2015-10-22 02:42:23

标签: servicestack

我们正在使用ServiceStack(喜欢它)开展项目,但需要一些奇怪问题的帮助。在我们的项目中,我们使用helper方法抛出或返回各种类型的HttpError,其中包含ErrorResponse和ResponseStatus对象。

遵循here描述的模式。像这样:

protected HttpError BusinessError(string summaryMessage = "Some generic validation summary.")
    {           
        return new HttpError(HttpStatusCode.BadRequest, "MyValidationType", summaryMessage)
        {                           
            Response = new ErrorResponse
            {
                ResponseStatus = new ResponseStatus
                {
                    ErrorCode = "MyValidationType",
                    Message = summaryMessage,
                    Errors = new List<ResponseError>()
                },
            }
        };
    }

在服务电话中我们会像这样使用它:

throw BusinessError("Help I've fallen and can't get up!");

这将是一种享受,我们将其提供给ss验证JS库以呈现我们的验证消息。工作得很好。

问题是现在ServiceStack不会将任何HttpError的详细信息序列化到响应中。我们得到的是400状态代码,'MyValidationType'错误代码和空JSON响应{}的响应。

我尝试过使用抛出/返回错误并将服务方法的返回类型切换为object等组合,但似乎没有任何区别。说实话,我不确定在我们的项目中我们可以改变什么来引起这种行为。

我很欣赏有关可能导致这种情况的任何建议或指示吗?

1 个答案:

答案 0 :(得分:4)

如果您使用{RequestName}{RequestName}Response命名惯例以及Response DTO does not have a ResponseStatus property

,就会发生这种情况
  

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

在这种情况下,解决方案只是将ResponseStatus属性添加到R​​esponse DTO:

public class RequestNameResponse
{
    public ResponseStatus ResponseStatus { get; set; }
}