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 リクエストを送信しますが、潜在的な例外を適切に処理しません。この問題を解決するには、Web リクエストに関連する例外の管理に特化した WebException
クラスを使用します。コードの更新バージョンは次のとおりです:
<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#で投稿リクエストを行うときに例外を適切に処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。