我们正在使用ServiceStack开发一个项目(喜欢它),但需要一些奇怪问题的帮助。在我们的项目中,我们使用辅助方法抛出或返回带有ErrorResponse和ResponseStatus对象的各种类型的HttpError。
它遵循此处描述的模式。像这样:
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>()
},
}
};
}
Run Code Online (Sandbox Code Playgroud)
在服务电话中,我们将这样使用它:
throw BusinessError("Help I've fallen and can't get up!");
Run Code Online (Sandbox Code Playgroud)
这会起作用,我们将其馈送到ss-validation JS库中以呈现我们的验证消息。很好
问题在于,现在ServiceStack不会将HttpError的任何详细信息序列化到响应中。我们得到的只是一个带有400状态代码,“ MyValidationType”错误代码和空JSON响应的响应{}。
我已经尝试过使用抛出/返回错误以及将服务方法的返回类型切换为objectetc的组合,但是似乎没有什么不同。老实说,我不确定我们在项目中可能发生了什么更改而导致这种行为。
对于可能导致此问题的任何建议或建议,我将不胜感激。
如果您使用{RequestName}和{RequestName}Response命名约定,并且Response DTO没有ResponseStatus属性,则会发生这种情况:
无论服务方法的响应类型如何,都将返回{RequestDto} Response。如果{RequestDto} Response DTO 具有ResponseStatus属性,则将其填充,否则将不返回ResponseStatus。(如果您已经使用[DataContract] / [DataMember]属性修饰了{ResponseDto} Response类和属性,则还需要修饰ResponseStatus来进行填充)。
在这种情况下,解决方案是将ResponseStatus属性添加到Response DTO:
public class RequestNameResponse
{
public ResponseStatus ResponseStatus { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |