默認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例外響應。 –