2011-08-16 5 views
2

私は通常、Windows Phone 7(以下のコード)で簡単なhttpの投稿をしています。私はポストの間にシオマネキを見てみると、私は非同期http投稿中に発生した内部サーバーエラーを解析する方法はありますか?

{System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFoun...

以外の何かを見つけることができません非同期ポストの上にトライキャッチを入れたとき、私は私の質問があり、サーバー

HTTP/1.1 500 Internal Server Error Cache-Control: private Content-Type: application/json; charset=utf-8 Server: Microsoft-IIS/7.5 jsonerror: true X-AspNet-Version: 2.0.50727 X-Server: www03 X-Site: prod Date: Tue, 16 Aug 2011 03:49:51 GMT Content-Length: 220

{"Message":"We’re sorry ... }

からこの結果を見ますこれはどうすればこの例外から実際のメッセージ(フィドラーに表示される)を得ることができますか?またはどのように私はこの例外を完全に避けて、私は実際のエラーメッセージのためにそれを解析することができますjsonを得ることができますか?

public void Checkout(ResponseAndCookies responseAndCookies) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/checkout"); 
     request.ContentType = "application/json"; 
     request.CookieContainer = responseAndCookies.CookieContainer; 
     request.Method = "POST"; 
     request.AllowAutoRedirect = false; 
     request.Accept = "application/json"; 

     request.BeginGetRequestStream(new AsyncCallback(GetRequest), request); 
    } 

    private void GetRequest(IAsyncResult asyncResult) 
    { 
     var json = "{\"valid\":true}"; 
     byte[] byteArray = Encoding.UTF8.GetBytes(json); 

     HttpWebRequest request = (HttpWebRequest) asyncResult.AsyncState; 
     Stream newStream = request.EndGetRequestStream(asyncResult); 
     newStream.Write(byteArray, 0, byteArray.Length); 
     newStream.Close(); 

     request.BeginGetResponse(new AsyncCallback(GetResponse), request); 
    } 

    private void GetResponse(IAsyncResult asyncResult) 
    { 
      var response = ReadResponse(asyncResult); //if I try catch this I get the exception listed above :(
    } 

    private ResponseAndCookies ReadResponse(IAsyncResult result) 
    { 
     Stream dataStream = null; 
     HttpWebRequest request = (HttpWebRequest) result.AsyncState; 
     HttpWebResponse response = request.EndGetResponse(result) as HttpWebResponse; 
     dataStream = response.GetResponseStream(); 
     StreamReader reader = new StreamReader(dataStream); 
     string responseFromServer = reader.ReadToEnd(); 
     reader.Close(); 
     dataStream.Close(); 
     response.Close(); 

     var responseAndCookies = new ResponseAndCookies 
            {CookieContainer = request.CookieContainer, Markup = responseFromServer}; 

     return responseAndCookies; 
    } 

答えて

1

事前にありがとうHTTP 500(つまり、HTTP 404だろう) "見つかりません" と同じではありません。したがって、あなたの例外は実際には関連していません。とにかく、明らかにコンテンツレスポンスストリームを読む必要があります。

catch句内のWebException.Responseプロパティを使用して応答を読み取ることができます。

と言われたら、RestSharpのようなフレームワークを調べることをお勧めします。いいえ、あなた自身でコードを書いてください。

+0

ありがとうございます!あなたはこれで良い時間を過ごし、いつものようにあなたは昼を救った! –

関連する問題