Получение ответа API от ошибки HTTP-вызова

Я пытаюсь получить ответ от API. Ссылка API содержит идентификационный номер субъекта. например http.../a12 Он вернет объект XML, как показано в Postman.

<Response>
    <code>200</code>
    <status>OK</status>
    <message>Completed</message>
    <messageCode/>
    <returnObj>
        <field1>0.25000</field1>
        <field2>0.01150</field2>
    </returnObj>
</Response>

Однако, если я отправил API, где идентификатор не существует в базе данных, скажем, http.../g14, он вернет этот XML в Postman.

<Response>
    <code>400</code>
    <status>BAD_REQUEST</status>
    <message>ID is invalid.</message>
    <messageCode>RGN001</messageCode>
    <returnObj/>
</Response>

Я могу без проблем получить первый объект XML, но не могу получить второй XML, содержащий ошибку. Мой клиент ASP возвратил бы ошибку 400, даже если XML возвращается в Postman.

Мой код для извлечения XML выглядит примерно так

HttpWebRequest wrWebRequest = setAuthHeader(endpoint);
wrWebRequest.Method = "GET";
HttpWebResponse wrWebResponse = wrWebRequest.GetResponse() as HttpWebResponse; //it fails here.

Конечно, консоль возвращает эту ошибку

System.Net.WebException: The remote server returned an error: (400) Bad Request.

Поочередно, я также пробую другой метод

var client = new WebClient();
client.Headers[HttpRequestHeader.Authorization] = "Basic xxxxxxx";
var text = client.DownloadString(endpoint);

Но это возвращает ту же ошибку.

Я просто хочу получить второй ответ XML всякий раз, когда я делаю недопустимый HTTP-вызов, в котором ответ был сделан на заказ.

Заранее спасибо за любое руководство и помощь.


person Xidane    schedule 17.06.2019    source источник


Ответы (1)


К сожалению, WebClient предназначен для такой работы. Вы можете попытаться создать там блок try catch, чтобы проверить, получили ли вы 400, но это только добавляет накладные расходы.

Я рекомендую вам использовать HttpClient, который не выбрасывает, если вы получаете ответ 400 Bad Request.

Документацию по HttpClient можно найти здесь.

person Florin-Constantin Ciubotariu    schedule 17.06.2019