Я использую атрибут [WebGet] для запроса REST API на веб-сервере. Время от времени (поскольку API все еще находится в стадии разработки) я получаю документ HTML в виде ошибки HTTP / 500 вместо XML, который я хочу.
Вот пример моего операционного контракта:
[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");
В случае ошибки «результаты» в конечном итоге становятся XElement, который содержит этот XML:
<html>
<head></head>
<body>
500 Internal Server Error
</body>
</html>
Есть ли какой-нибудь способ перехватить ошибку 500 до того, как XML-файл будет возвращен, и канал выдаст исключение или что-то в этом роде? Или мне придется каждый раз проверять переменную результатов, чтобы убедиться, что там есть ожидаемый XML?