2016-10-22 4 views
0

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

{ "успех": ложный, "ошибка": [
{
"ИмениСвойство": "Ориентир",
"причина": " 'Ссылка' не должна быть пустой."
}
{
"ИмениСвойства": "Ссылка",
"причина": " 'Ссылка' не должен быть пустым."
}, { "propertyName": "Key",
"reason": "'Key' должно быть от 10 до 15 символов. Вы ввели 3 символа."
}, { "propertyName": "Key",
"reason": "Ключ не начинается с нуля: 123." }], «предупреждение»: [], «информация»: []

Это как я взываю к API третьей стороны, но когда я ударил эту линию я получаю стандартную ошибку .net отбросьте мой вопрос, как я могу вместо этого получить значения вышеуказанного json назад

var httpResponse = (HttpWebResponse) httpWebRequest.GetResponse();

выстрел экрана, как я не могу загрузить

https://snag.gy/Itoy02.jpg

public void TransferToSlate(string json, string url) 
{ 
     var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
     httpWebRequest.ContentType = "application/json"; 
     httpWebRequest.Method = "POST"; 

     using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
     { 
      streamWriter.Write(json); 
     } 

     var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      var result = streamReader.ReadToEnd(); 
     } 
} 

Edit 2 Я попытался следующие, и ее получили мне немного futher, но не к desps двух списков объектов представленных в ошибки

public void TransferToSlate(string json, string url) 
{ 

    try { 
     var httpWebRequest = (HttpWebRequest)WebRequest.Create(url); 
      httpWebRequest.ContentType = "application/json"; 
      httpWebRequest.Method = "POST"; 

      using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
      { 
       streamWriter.Write(json); 
      } 


      var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
      using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
      { 
       var result = streamReader.ReadToEnd(); 
      } 
     } 
     catch (WebException ex){ 

      var resp = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd(); 

      dynamic obj = JsonConvert.DeserializeObject(resp); 
      var messageFromServer = obj.error.message; 

     } 

Таким образом, я создал этот класс, но я не уверен, как d eserilize ошибок к нему

public class ErrorMessage 
{ 
    public string PropertyName { get; set; } 

    public string Reason { get; set; } 

    public override string ToString() 
    { 
     return string.IsNullOrWhiteSpace(PropertyName) 
      ? Reason 
      : string.Format("{0} : {1}", PropertyName, Reason); 
    } 
} 

Редактировать 3

Я попытался следующие здесь, но он только что вернулся нуль, когда я не она должна быть заполнена с ошибками bleow из JSON в моем первом посте.

catch (WebException ex){ 

      var resp = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd(); 
      ErrorMessage error = JsonConvert.DeserializeObject<ErrorMessage>(resp); 
      var fieldinformation = error.PropertyName.ToString(); 
      var messageFromServer = error.Reason.ToString(); 

     } 

ответ

0

Вы можете прочитать ответ от WebException:

try 
{ 
    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
    using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
    { 
     var result = streamReader.ReadToEnd(); 
    } 
} 
catch(WebException ex) 
{ 
    var httpResponse = ex.Response as HttpWebResponse; 
    if (httpResponse != null) 
    { 
     // process the response 
    } 
} 
+0

Я просто tesing этого подхода, но это не получить мне информацию в пределах ошибок именно это я требовать, чтобы отправить обратно к моему клиенту –

+0

, пожалуйста, ознакомьтесь с моим надзором, чтобы узнать, как я могу delserilize в моем списке объектов, пожалуйста. –

 Смежные вопросы

  • Нет связанных вопросов^_^