在C#中进行REST API调用
问题:
我在使用下面的代码执行POST请求时遇到问题。catch块中似乎有一个错误,我找不到。你能帮我排除故障吗?
<code class="language-csharp">using System; using System.IO; using System.Net; using System.Text; class Class1 { private const string URL = "https://sub.domain.com/objects.json?api_key=123"; private const string DATA = @"{""object"":{""name"":""Name""}}"; static void Main(string[] args) { Class1.CreateObject(); } private static void CreateObject() { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.Method = "POST"; request.ContentType = "application/json"; request.ContentLength = DATA.Length; StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII); requestWriter.Write(DATA); requestWriter.Close(); try { WebResponse webResponse = request.GetResponse(); Stream webStream = webResponse.GetResponseStream(); StreamReader responseReader = new StreamReader(webStream); string response = responseReader.ReadToEnd(); Console.Out.WriteLine(response); responseReader.Close(); } catch (Exception e) { Console.Out.WriteLine("-----------------"); Console.Out.WriteLine(e.Message); } } }</code>
解答:
虽然提供的代码有效地发送了POST请求,但它没有正确处理潜在的异常。为了解决这个问题,请使用WebException
类,该类专门管理与Web请求相关的异常。以下是代码的更新版本:
<code class="language-csharp">try { WebResponse webResponse = request.GetResponse(); Stream webStream = webResponse.GetResponseStream(); StreamReader responseReader = new StreamReader(webStream); string response = responseReader.ReadToEnd(); Console.Out.WriteLine(response); responseReader.Close(); } catch (WebException e) { Console.Out.WriteLine(e.Message); // 更高级的错误处理,例如检查e.Status属性以获取更具体的错误信息 if (e.Response != null) { using (var errorStream = e.Response.GetResponseStream()) { using (var reader = new StreamReader(errorStream)) { Console.Out.WriteLine("Error details: " + reader.ReadToEnd()); } } } }</code>
通过使用WebException
类,您可以捕获和处理Web请求期间可能发生的任何异常,从而提供更具体和更有信息的错误消息。 改进后的代码还包含了对e.Response
的检查,可以从服务器获取更详细的错误信息。 使用using
语句确保正确关闭流,避免资源泄漏。
以上是C#发出POST请求时如何正确处理异常?的详细内容。更多信息请关注PHP中文网其他相关文章!