我正在使用 [WebGet] 属性查询网络服务器上的 REST API。每隔一段时间(因为 API 仍在开发中)我会以 HTTP/500 错误的形式返回 HTML 文档,而不是我想要的 XML。
这是我的操作契约(Contract)的示例:
[WebGet(UriTemplate = "search/?api_key={key}&query={query}",
BodyStyle = WebMessageBodyStyle.Bare)]
[OperationContract]
XElement Find(string key, string query);
...我是这样调用它的:
var factory = new WebChannelFactory<IFooFinder>(
new Uri("http://api.example.com"));
var channel = factory.CreateChannel();
var results = channel.Find(myApiKey, "foo");
如果出现错误,“results”最终会成为包含此 XML 的 XElement:
<html>
<head></head>
<body>
500 Internal Server Error
</body>
</html>
有没有办法在返回 XML 之前捕获 500 错误,并让 channel 抛出异常或其他什么?还是我每次都必须检查结果变量以确保我期望的 XML 在那里?
最佳答案
不,您不能真正抛出异常或 SOAP 错误,因为您真正拥有的只是 HTTP。因此,如果您的服务失败,它可以将此信息传回 HTTP 客户端的唯一方法是通过 HTTP 状态代码。
您可以尝试使代码更有意义,例如不要总是返回 500,而是将其分解为更多细节,或者您可以包含更多描述性错误消息(至少对于开发和测试而言)以提示您出了什么问题。
但基 native 制是:您只使用 HTTP 获取 GET,您只有 HTTP 返回状态和错误代码。
马克
关于.net - 使用 WCF 的 WebGet 属性时如何捕获 HTTP 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/838297/