2016-10-22 7 views
0

jsonとしてエラーを返すWebサービスにぶつかります。 Webクライアントを使用しているときにこれらのエラーをどのように解釈できますか?私はこれらを私のユーザに渡して、彼らが犯している誤りがないようにしたいと思っています。標準の.netの代わりにjsonベースのエラーを取得するには

{ "成功":偽、 "エラー":[
{
"プロパティ名": "参照"、
"理由は": " '参考' 空にすることはできません。"
}、
{
"プロパティ名": "参照"、
"理由": " 'リファレンス' は空であってはなりません"。
}、 { "propertyName": "Key"、
"reason": "'Keyは10〜15文字でなければなりません。
} { "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(); 
     } 
} 

私は、次のとは私にビットfutherを得なく内に2つのリストpropertyesのdespsにしようとしている2 編集エラー

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それ

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

にエラーをeserilize私はここで、以下を試してみましたが、私はそれが私の最初の記事で、JSONからbleowエラーで満たされるべき何時にそれはちょうどヌル戻って来ませんでした。

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することができます参照してください私の上記の編集を参照してくださいしてください。 –

関連する問題