2016-10-03 1 views
0

Je publie des données JSON dans l'API. Si je publie des données erronées, le bloc catch n'attrape pas d'erreur. Les contrôles s'arrêtent à using (httpResponse = (HttpWebResponse)httpWebRequest.GetResponse()) et affichent une erreur. Quel mal je fais. Après mon code,Erreur dans httpwebrequest Gestion des exceptions

try 
     { 

      ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications); 
      var httpWebRequest = (HttpWebRequest)WebRequest.Create("ipaddress"); 
      httpWebRequest.Credentials = new NetworkCredential("", ""); 
      httpWebRequest.ContentType = "application/json"; 
      httpWebRequest.Method = "POST"; 

      using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
      { 
       string name = objTSPost.name; 
       string servicetype = objTSPost.service_type; 
       string json = "{\"name\":\"VMR_" + name + "\"," + 
           "\"service_type\":\"" + servicetype + "\"}"; 

       streamWriter.Write(json); 
       streamWriter.Flush(); 
       streamWriter.Close(); 
      } 


      using (httpResponse = (HttpWebResponse)httpWebRequest.GetResponse()) 
      { 
       using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
       { 
        var result = streamReader.ReadToEnd(); 
       } 
       string str = "{\"name\":\"VMR_" + objTSPost.name + "\"," + 
            "\"service_type\":\"" + objTSPost.service_type + "\"}"; 
       var data = JsonConvert.DeserializeObject<TSGetRootObject>(str); 
       data.status = ((HttpWebResponse)httpResponse).StatusDescription; 
       return data; 
      } 

     } 
     catch (WebException ex) 
     { 
      objTSPost.status = ex.Message; 
      return objTSPost; 
     } 

    } 
+0

Pouvez-vous poster quelques détails sur l'erreur que vous obtenez? Le message, le type de l'exception? –

+2

Utilisez une exception plus générique au lieu de WebException si catch n'attrape PAS. – sachin

+0

Vous rencontrez des exceptions de type exception WebException. Il pourrait être en train de lancer un autre type d'exception, c'est pourquoi il n'est pas pris. Je suggère, vous devez ajouter un autre bloc catch de type générique "Exception". Quelque chose comme ce catch (Exception ex) { objTSPost.status = ex.Message; return objTSPost; } – Majid

Répondre

1

Sachin est correcte, vous devez gérer les exceptions de la plus spécifique à la moins exception spécifique.

Ce n'est pas une bonne pratique de propager le message d'exception aux utilisateurs car cela pourrait révéler des failles de sécurité, je vous suggère plutôt de consigner le message et de propager un message standard. Peut-être que vous le faites après que la méthode retourne sa valeur, mais comme le reste du code n'est pas disponible, je voudrais juste vous donner une tête dessus.

try 
    { 

     //My maybe not toally reliable code 

    } 
    catch (WebException ex) 
    { 
     LogMessage(ex.Message); 
     objTSPost.status = "My custom userfriendly specific web exception message"; 
     return objTSPost; 
    } 
    catch(Exception ex) 
    { 
     LogMessage(ex.Message); 
     objTSPost.status = "My custom userfriendly unhandled exception message"; 
     return objTSPost; 
    } 
+0

Merci @JFM pour votre précieuse suggestion. –