2012-01-20 9 views
1

ここは、RESTfulなWebサービスにPOSTするためのコードです。私の問題は最後の行です。 たとえば、私のサーバーは異なるメッセージと同じコードで返信することができます。 今、私は200 OKを取得しない限り、私はちょうど最後の行に例外を取得します。httpコールから適切な応答を得ます。例外ではありません。

私が得たコードに関係なく、レスポンスヘッダーなどにアクセスしたいと思っています。そんなことがあるものか?

var request = WebRequest.Create(Options.DitatServerUri + Options.DitatAccountId + "/integration/trip") as HttpWebRequest; 
      if (request == null) return false; 

      request.ContentType = "application/json"; 
      request.Headers.Add(HttpRequestHeader.Authorization, "Basic " + Convert.ToBase64String(Encoding.UTF8.GetBytes(Options.DitatLoginName + ":" + Options.DitatPassword))); 
      request.Method = "POST"; 

      var serializer = new JavaScriptSerializer(); 

      var serializedData = serializer.Serialize(trip); 

      var bytes = Encoding.UTF8.GetBytes(serializedData); 

      request.ContentLength = bytes.Length; 
      var os = request.GetRequestStream(); 
      os.Write(bytes, 0, bytes.Length); 
      os.Close(); 

      var response = request.GetResponse(); 

例:WebException「無効な操作」が発生しますが、サーバーは実際にエラーの説明付きのメッセージを送信します。

+1

経由で応答を得ることができますか? [the manual](http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.getresponse.aspx)をお読みになりましたか? – Jon

+0

'WebException'を返します。十分に私は推測する - 私はHTTPコードを取得するが、私は他の例外については不平を言っていないヘッダーなどを読み取るしたい。サーバが実際に応答したときのレスポンスをより詳細に制御したいだけです – katit

+0

ヘッダの場合、 'WebException.Response.Headers'をチェックしてください。 –

答えて

1

ジョンはコメントして先に言った上に構築され、不正なステータスコードのためにスローされた例外はthis MSDN pageごとに、レスポンスとステータスの性質を持っている、最も可能性の高いWebExceptionです。したがって、あなたは

WebResponse response = null; 
try 
{ 
    response = request.GetResponse(); 
} 
catch (WebException ex) 
{ 
    response = ex.Response; 
} 
+0

ありがとう!それは脳のおならだった..私は例外に掘り下げることができないことを理解していなかった。 – katit

1

例外をキャッチして適切に処理してみませんか?

try 
{ 
    var response = request.GetResponse(); 
} 
catch (WebException webEx) 
{ 
    Console.WriteLine("Error: {0}", ((HttpWebResponse)webEx.Response).StatusDescription); 
} 
関連する問題