4

そのため、System.Net アセンブリで APIを使用していHttpWebRequestますが、C# にはチェック例外がないため、ネットワーク エラーなどの一般的な原因によって発生する避けられない例外を適切に処理するために、try-catch ブロックをどこに配置すればよいかわかりません。ご存じのように、Java では、これらを単純な古いチェック済みと呼びますIOExceptions

これは私がこれまでに持っているものです。ネットワーク エラーを処理するように try-catch ブロックが正しく設定されていますか? 正しいメソッド呼び出しをラップしていますか? ドキュメントを見ると、それらは正しいと思いますが、もう 1 組の目が必要です。

HttpWebRequest request = WebRequest.CreateHttp(url);
request.Method = "POST";
request.BeginGetRequestStream(getRequestResult =>
            {
                HttpWebRequest getRequestRequest = (HttpWebRequest) getRequestResult.AsyncState;
                try
                {
                    Stream requestStream = getRequestRequest.EndGetRequestStream(getRequestResult);
                    requestStream.Write(parametersData, 0, parametersData.Length);
                    requestStream.Dispose();
                    getRequestRequest.BeginGetResponse(getResponseResult =>
                        {
                            HttpWebRequest getResponseRequest = (HttpWebRequest)getResponseResult.AsyncState;
                            try
                            {
                                WebResponse response = getResponseRequest.EndGetResponse(getRequestResult);
                                Stream responseStream = response.GetResponseStream();
                                StreamReader reader = new StreamReader(responseStream);
                                string jsonString = reader.ReadToEnd();
                                reader.Dispose();
                                JObject jsonObject = JObject.Parse(jsonString);
                                onResult(StatusCode.Ok, jsonObject);
                            }
                            catch (WebException)
                            {
                                onResult(StatusCode.NetworkError);
                            }
                        }, getRequestRequest);
                }
                catch (IOException)
                {
                    onResult(StatusCode.NetworkError);
                }
            }, request);
4

1 に答える 1