2016-10-03 7 views
0

Я отправляю данные JSON в API. Если я отправляю неверные данные, то catch блок не поймает ошибку. Элементы управления останавливаются на using (httpResponse = (HttpWebResponse)httpWebRequest.GetResponse()) этой точке и показывают ошибку. Что плохого я делаю. Ниже мой код,Ошибка в httpwebrequest Обработка исключений

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

Не могли бы вы предоставить дополнительные сведения об ошибке, которую вы получаете? Сообщение, тип исключения? –

+2

Используйте более общее исключение вместо WebException, если catch не является ловушкой. – sachin

+0

Вы используете только исключения типа webexception. Это может быть бросок какого-то другого исключения, поэтому его не поймали. Я предлагаю вам добавить еще один блок catch универсального типа «Исключение». Что-то вроде этого catch (Exception ex) { objTSPost.status = ex.Message; return objTSPost; } – Majid

ответ

1

Сэчин правильно, вы должны обрабатывать исключения из наиболее характерных для наименее конкретного исключения.

Кроме того, это не является хорошей практикой, распространяющей сообщение об исключениях пользователям, так как оно может выявлять уязвимости безопасности, вместо этого я предлагаю вам записать фактическое сообщение и распространить стандартное дружественное сообщение. Может быть, вы делаете это после того, как метод возвращает значение, но поскольку остальная часть кода недоступна, я просто хотел бы дать вам хедз-ап.

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

Спасибо @JFM за ваше ценное предложение. –