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();
}
}