2016-10-22 1 views
0

Ich treffe einen Web-Services, die ihre Fehler als JSON zurückgibt. Wie kann ich diese Fehler interpretieren, wenn ich einen Web-Client verwende? Ich möchte diese an meine Benutzer weitergeben können, damit sie die Fehler nicht bekommen.Wie bekomme ich JSON-basierte Fehler statt Standard .net

{ "Erfolg": false, "Fehler": [
{
"PROPERTY": "Reference",
"Grund": " 'Reference' darf nicht leer sein."
},
{
"PROPERTY": "Reference",
"Grund": " 'Reference' darf nicht leer sein."
}, { "propertyName": "Schlüssel",
"Grund": "'Schlüssel' muss zwischen 10 und 15 Zeichen sein. Sie haben 3 Zeichen eingegeben."
}, { "propertyName": "Schlüssel",
"Grund": "Schlüssel beginnt nicht mit Null: 123." }], „Warnungen“: [], „Information“: []

Dies ist, wie ich an den Dritten api nenne, aber wenn ich diese Linie traf ich einen Standard .net Fehler bekommen zurückwerfen meine Frage ist, wie kann ich stattdessen die Werte der oben genannten JSON zurück

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

Screenshot, wie ich nicht

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 Ich habe versucht, innerhalb der folgenden Eigenschaften und seine hat mich ein wenig weitere, aber nicht auf die desps der beiden Listen propertyes hochladen Fehler

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; 

     } 

Also habe ich diese Klasse erstellt, aber ich bin nicht sicher, wie man d eserilize Fehler es

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); 
    } 
} 

bearbeiten 3

Ich habe versucht, hier die folgenden, aber es kam nur zurück null, wenn ich nicht mit den bleow Fehler aus der json in meinem ersten Beitrag gefüllt werden soll.

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(); 

     } 

Antwort

0

Sie können die Antwort von der WebException lesen:

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

Ich war gerade diesen Ansatz tesing aber das macht mich nicht die Informationen innerhalb Fehler es ist dies i erforderlich bin meinem Kunden zurück zu senden –

+0

Bitte beachten Sie meine obige Bearbeitung, um zu sehen, wie ich zu meiner Liste Objekt delserilize bitte. –

Verwandte Themen