在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中文網其他相關文章!