从http调用中获得正确的响应,不例外

本文关键字:响应 调用 http | 更新日期: 2023-09-27 18:20:47

以下是我用于POST到RESTful web服务的代码。我的问题是最后一行。例如,我的服务器可以用不同的消息和相同的代码进行回复。现在,除非我得到200 OK,否则我在最后一行就会得到异常。

无论我得到什么代码,我都希望能够更好地访问响应标头等。这怎么可能?

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"无效操作",但服务器实际上发送了带有错误解释的消息。

从http调用中获得正确的响应,不例外

基于Jon在上面的评论中所说的,为错误状态代码抛出的异常很可能是WebException,根据MSDN页面,它具有响应和状态属性。因此,您可以通过以下方式获得响应:

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

为什么不捕获异常并进行适当的处理?

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