HTTP経由でサーバーサイドと通信するデスクトップクライアントがあります。サーバーのデータ処理に問題がある場合、適切な HTTP コード (主に HTTP-400) を含む HTTP 応答本文の JSON でエラーの説明を返します。
HTTP-200 応答を読むと、すべて問題なく、このコードが機能します。
using (var response = await httpRequest.GetResponseAsync(token))
{
using (var reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")))
{
return await reader.ReadToEndAsync();
}
}
しかし、エラーが発生し、WebException がスローされてキャッチされると、次のコードが表示されます。
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.ProtocolError)
{
using (var response = (HttpWebResponse) ex.Response)
{
using (var stream = response.GetResponseStream())
{
using (var reader = new StreamReader(stream, Encoding.GetEncoding("utf-8")))
{
var json = reader.ReadToEnd();
}
}
}
}
}
私はすでにそれを機能させるために何かを行っていますが、次のことが起こります:
response.ContentLength
有効です(184)がstream.Length
0で、その後jsonを読み取ることができません(それ""
はです)どこを見ればよいかさえわかりません。動作するはずです。
何が問題なのですか?