我们正在使用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
等组合,但似乎没有任何区别。说实话,我不确定在我们的项目中我们可以改变什么来引起这种行为。
我很欣赏有关可能导致这种情况的任何建议或指示吗?
答案 0 :(得分:4)
如果您使用{RequestName}
和{RequestName}Response
命名惯例以及Response DTO does not have a ResponseStatus property:
无论服务方法的响应类型如何,都会返回{RequestDto}响应。如果{RequestDto}响应DTO 具有ResponseStatus属性,则会填充它,否则将不返回ResponseStatus 。 (如果您使用[DataContract] / [DataMember]属性修饰了{ResponseDto} Response类和属性,那么还需要对ResponseStatus进行修饰,以便填充。
在这种情况下,解决方案只是将ResponseStatus属性添加到Response DTO:
public class RequestNameResponse
{
public ResponseStatus ResponseStatus { get; set; }
}