Я использую атрибут [WebGet] для запроса API REST на веб-сервере. Каждый раз так часто (поскольку API все еще находится в разработке), я возвращаю HTML-документ в виде ошибки HTTP/500 вместо XML, который я хочу.Как уловить ошибки HTTP при использовании атрибута WebGet WCF?
Вот пример моей работы контракта:
[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, который я ожидаю, там?
Спасибо Marc. Чтобы добавить оскорбление к травме, я думаю, что API REST, который я вызываю, фактически возвращает 200/OK, даже если есть ошибка, и только дает мне сообщение об ошибке в HTML. Мне нужно связаться с ними для получения дополнительной информации. –