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(); 
}); 
+0

但当can''t反序列化请求MyRequest,ServiceStack将返回一个异常响应。 –

+0

是的ServiceStack需要能够反序列化请求,如果你想自己反序列化请求,你可以[实现IRequiresRequestStream](http://docs.servicestack.net/serialization-deserialization#reading-directly-from-the-request -流)。 – mythz

+0

嗨,我不需要自己反序列化请求,但我想处理异常时,反序列化和发送自定义响应,而不是构建在exp例外响应。 –