2017-06-22 63 views

回答

0

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