.net - 使用 WCF 的 WebGet 属性时如何捕获 HTTP 错误?

标签 .net wcf http rest

我正在使用 [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/

相关文章:

c# - 使用 C# 中的串行端口从地磅机获取重量

wcf - Visual Studio 2015 + Xamarin + native 可移植 PCL + WCF

wcf - 通过 SSL 的 REST WCF 服务

c# - 请求在 WCF IIS 服务器中堆积

Android - HTTP GET 请求

c# - 在抽象类及其实现之间实现版本检查

c# - Svn 外部和 C# 程序集 - 不兼容?

php - JSON 原始 POST cURL 请求不起作用

.net - .Net 中的程序集版本检查

android - ASIHTTPRequest 等效于 Android 或任何 HTTP 请求管理器/包装器?