2012-01-20 21 views
1

这里是我用来POST到REST风格的web服务中的代码。我的问题是最后一行。 例如,我的服务器可以使用不同的消息和相同的代码进行回复。 现在,除非我得到200好,我只是在最后一行得到例外。从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

有什么异常?您是否阅读了[手册](http://msdn.microsoft.com/zh-cn/library/system.net.httpwebrequest.getresponse.aspx)? – Jon

+0

它返回'WebException'。足够好我猜 - 我得到HTTP代码,但我想读取标题等,我不抱怨其他例外。我只想在服务器实际响应时对响应有更多的控制 – katit

+0

对于标题,请检查WebException.Response.Headers。 –

回答

1

建立在什么上面乔恩在评论中说,抛出一个糟糕的状态代码的例外是最有可能是WebException,其中有响应和状态属性,每this MSDN page。因此,您可以通过以下方式获得回复:

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); 
} 
相关问题