从错误HTTP调用获取API响应

时间:2019-06-17 07:14:35

标签: c# asp.net xmlhttprequest

我正在尝试从API获得响应。 API链接包含主题的ID号。例如http ... / a12 如Postman所示,它将返回XML对象。

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

但是,如果我发送了一个数据库中ID不存在的API,例如http ... / g14,它将在邮递员中返回此XML。

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

我可以毫无问题地检索第一个XML对象,但无法检索包含错误的第二个XML对象。即使XML是在Postman中返回的,我的ASP客户端也会返回错误400。

我检索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);

但这会返回相同的错误。

我只想在进行无效响应的HTTP调用时检索第二个XML响应。

在此先感谢您的指导和帮助。

1 个答案:

答案 0 :(得分:0)

不幸的是,WebClient被设计为以这种方式工作。您可以尝试在其中放置一个[47, 69, 76, 97]块,以检查是否收到try catch,但这只会增加开销。

我建议您使用400,它不会在收到HttpClient响应的情况下抛出。

有关400 Bad Request的文档可以在here中找到。