LoginSignup
3
2

More than 3 years have passed since last update.

Httpエラー時レスポンス取得できない時の対処法

Posted at

Httpエラー時、GetResponse()処理がエラー発生、エラー処理に行くため、レスポンス取得できないです。
そのため、エラー処理を下記のようにする必要がある。

    public Verify_Response Verify(string url, Verify_Request jsonRequest) {
        Verify_Response result = new Verify_Response();

        HttpWebRequest req = req = (HttpWebRequest)WebRequest.Create(url);
        req.ContentType = "application/json";
        req.Method = "POST";

        try
        {
            string jsonString = JsonConvert.SerializeObject(jsonRequest);

            using (var streamWriter = new StreamWriter(req.GetRequestStream()))
            {
                streamWriter.Write(jsonString);
                streamWriter.Flush();
                streamWriter.Close();
            }

            HttpWebResponse res = (HttpWebResponse)req.GetResponse();

            using (var streamReader = new StreamReader(res.GetResponseStream()))
            {
                result = JsonConvert.DeserializeObject<Verify_Response>(streamReader.ReadToEnd());
            }

            return result;
        }
        catch (System.Net.WebException ex)
        {
            //HTTPプロトコルエラーかどうか調べる
            if (ex.Status == System.Net.WebExceptionStatus.ProtocolError)
            {

                System.Text.Encoding enc =
                    System.Text.Encoding.GetEncoding("shift_jis");

                //HttpWebResponseを取得
                System.Net.HttpWebResponse errres =
                    (System.Net.HttpWebResponse)ex.Response;

                System.IO.Stream st = errres.GetResponseStream();
                System.IO.StreamReader sr = new System.IO.StreamReader(st, enc);
                string return_str = sr.ReadToEnd();
                //閉じる
                sr.Close();

                result = JsonConvert.DeserializeObject<Verify_Response>(return_str);

                return result;
            }
            else
            {
                TestLog.WriteLog(instanceId, LogLevel.EERROR, ex.Message);
                return result;
            }
        }
        finally {
            req.Abort();
        }
    }
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2