รับการตอบสนอง API จากการเรียก HTTP ที่มีข้อผิดพลาด

ฉันกำลังพยายามรับการตอบกลับจาก API ลิงก์ API มีหมายเลข ID ของเรื่อง เช่น. http.../a12 มันจะส่งคืนวัตถุ XML เท่าที่เห็นในบุรุษไปรษณีย์

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

อย่างไรก็ตาม หากฉันส่ง API โดยที่ไม่มี ID ในฐานข้อมูล เช่น http.../g14 API ก็จะส่งคืน XML นี้ในบุรุษไปรษณีย์

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

ฉันสามารถดึงข้อมูลออบเจ็กต์ XML แรกได้โดยไม่มีปัญหา แต่ฉันไม่สามารถดึงข้อมูล XML ที่สองซึ่งมีข้อผิดพลาดได้ ไคลเอนต์ ASP ของฉันจะส่งกลับข้อผิดพลาด 400 แม้ว่า XML จะถูกส่งกลับในบุรุษไปรษณีย์ก็ตาม

รหัสของฉันเพื่อดึงข้อมูล 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 ครั้งที่ 2 ทุกครั้งที่ฉันทำการเรียก 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