2010-09-22 12 views
5

के लिए अपवाद फेंक रहा है मुझे पता चला है कि HttpWebRequest मौजूदा संसाधनों के लिए WebException फेंक रहा है। मुझे बहुत अजीब लगता है क्योंकि HttpWebResponse में स्टेटसोड संपत्ति है (NotFount आइटम मौजूद है)। क्या आपको लगता है कि इसके लिए कोई कारण हैं या शायद यह केवल डेवलपर्स मुद्दा है?HttpWebRequest 404

var req = (HttpWebRequest)WebRequest.Create(someUrl); 
using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()) { 
    if (response.StatusCode == HttpStatusCode.OK) { ...} 
} 
+0

जो एपीआई आप कॉल कर रहे हैं उसे HTTP प्रतिक्रिया में सही त्रुटि कोड वापस करने की आवश्यकता है। मुझे डेवलपर समस्या की तरह लगता है, वे शायद त्रुटि को ठीक से पकड़ नहीं रहे हैं। – RPM1984

उत्तर

3

यह वास्तव में एक निराशाजनक समस्या है, जो चारों ओर निम्न एक्सटेंशन विधि वर्ग का उपयोग कर और बुला request.BetterGetResponse()

//----------------------------------------------------------------------- 
// 
//  Copyright (c) 2011 Garrett Serack. All rights reserved. 
// 
// 
//  The software is licensed under the Apache 2.0 License (the "License") 
//  You may not use the software except in compliance with the License. 
// 
//----------------------------------------------------------------------- 

namespace CoApp.Toolkit.Extensions { 
    using System; 
    using System.Net; 

    public static class WebRequestExtensions { 
     public static WebResponse BetterEndGetResponse(this WebRequest request, IAsyncResult asyncResult) { 
      try { 
       return request.EndGetResponse(asyncResult); 
      } 
      catch (WebException wex) { 
       if(wex.Response != null) { 
        return wex.Response; 
       } 
       throw; 
      } 
     } 

     public static WebResponse BetterGetResponse(this WebRequest request) { 
      try { 
       return request.GetResponse(); 
      } 
      catch (WebException wex) { 
       if(wex.Response != null) { 
        return wex.Response; 
       } 
       throw; 
      } 
     } 
    } 
} 

आप इसके बारे में अधिक अपने ब्लॉग पोस्ट में पर पढ़ें द्वारा काम किया जा सकता है http://fearthecowboy.com/2011/09/02/fixing-webrequests-desire-to-throw-exceptions-instead-of-returning-status/

1

पर इस विषय इस प्रयास करें:

var req = (HttpWebRequest)WebRequest.Create(someUrl); 
req.Method = "Head"; 

using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()) { 
    if (response.StatusCode == HttpStatusCode.OK) { ...} 
} 

WebRequest and System.Net.WebException on 404, slow?