ServiceStack返回自定义响应时无法反序列化要求
问题描述:
我使用servicestack处理来自客户端的XML请求,我的客户需要总是发送响应这样的:ServiceStack返回自定义响应时无法反序列化要求
<?xml version="1.0" encoding="utf-8"?>
<Response>
<actionCode>01</actionCode>
<errorCode>20450</errorCode>
</Response>
我如何与这种格式可以当响应不会反序列化请求。 谢谢。
答
默认ServiceStack返回响应DTO的DataContract序列化版本,所以如果你不通过XML的形状返回DTO得到想要的XML输出你想要的,如:
public class Response
{
public string actionCode { get; set; }
public string errorCode { get; set; }
}
如果你需要控制的确切XML响应您的服务可以只返回的XML字符串字面你想要的,如:
[XmlOnly]
public object Any(MyRequest request)
{
....
return @$"<?xml version="1.0" encoding="utf-8"?>
<Response>
<actionCode>{actionCode}</actionCode>
<errorCode>{errorCode}</errorCode>
</Response>";
}
编写自定义错误响应强烈不推荐的,因为它会破坏ServiceStack客户,现有的端点/格式等但你可以强制写一个C ustom XML误差未捕获的异常像序列化错误的东西,如:
UncaughtExceptionHandlers.Add((req, res, operationName, ex) =>
{
res.ContentType = MimeTypes.Xml;
res.Write([email protected]"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Response>
<actionCode>{ex.Message}</actionCode>
<errorCode>{ex.GetType().Name}</errorCode>
</Response>");
res.EndRequest();
});
但当can''t反序列化请求MyRequest,ServiceStack将返回一个异常响应。 –
是的ServiceStack需要能够反序列化请求,如果你想自己反序列化请求,你可以[实现IRequiresRequestStream](http://docs.servicestack.net/serialization-deserialization#reading-directly-from-the-request -流)。 – mythz
嗨,我不需要自己反序列化请求,但我想处理异常时,反序列化和发送自定义响应,而不是构建在exp例外响应。 –