无法反序列化请求时的 ServiceStack return 自定义响应
ServiceStack return custom response when can't deserialize request
我正在使用 servicestack 来处理来自客户端的 xml 请求,我的客户端要求始终发送这样的响应:
<?xml version="1.0" encoding="utf-8"?>
<Response>
<actionCode>01</actionCode>
<errorCode>20450</errorCode>
</Response>
无法反序列化请求时,如何使用这种格式进行响应。
谢谢。
默认情况下,ServiceStack return是 Response DTO 的 DataContract 序列化版本,因此,如果您没有通过 returning DTO 获得所需的 XML 输出XML 你想要,例如:
public class Response
{
public string actionCode { get; set; }
public string errorCode { get; set; }
}
如果您需要控制准确的 XML 响应,您的服务可以 return 您想要的 XML 字符串文字,例如:
[XmlOnly]
public object Any(MyRequest request)
{
....
return @$"<?xml version="1.0" encoding="utf-8"?>
<Response>
<actionCode>{actionCode}</actionCode>
<errorCode>{errorCode}</errorCode>
</Response>";
}
非常不推荐编写自定义错误响应,因为它会破坏 ServiceStack 客户端、现有端点/格式等。但是您可以强制为未捕获的异常编写自定义 XML 错误,例如反序列化错误,例如:
UncaughtExceptionHandlers.Add((req, res, operationName, ex) =>
{
res.ContentType = MimeTypes.Xml;
res.Write($@"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Response>
<actionCode>{ex.Message}</actionCode>
<errorCode>{ex.GetType().Name}</errorCode>
</Response>");
res.EndRequest();
});
我正在使用 servicestack 来处理来自客户端的 xml 请求,我的客户端要求始终发送这样的响应:
<?xml version="1.0" encoding="utf-8"?>
<Response>
<actionCode>01</actionCode>
<errorCode>20450</errorCode>
</Response>
无法反序列化请求时,如何使用这种格式进行响应。 谢谢。
默认情况下,ServiceStack return是 Response DTO 的 DataContract 序列化版本,因此,如果您没有通过 returning DTO 获得所需的 XML 输出XML 你想要,例如:
public class Response
{
public string actionCode { get; set; }
public string errorCode { get; set; }
}
如果您需要控制准确的 XML 响应,您的服务可以 return 您想要的 XML 字符串文字,例如:
[XmlOnly]
public object Any(MyRequest request)
{
....
return @$"<?xml version="1.0" encoding="utf-8"?>
<Response>
<actionCode>{actionCode}</actionCode>
<errorCode>{errorCode}</errorCode>
</Response>";
}
非常不推荐编写自定义错误响应,因为它会破坏 ServiceStack 客户端、现有端点/格式等。但是您可以强制为未捕获的异常编写自定义 XML 错误,例如反序列化错误,例如:
UncaughtExceptionHandlers.Add((req, res, operationName, ex) =>
{
res.ContentType = MimeTypes.Xml;
res.Write($@"<?xml version=""1.0"" encoding=""utf-8"" ?>
<Response>
<actionCode>{ex.Message}</actionCode>
<errorCode>{ex.GetType().Name}</errorCode>
</Response>");
res.EndRequest();
});