[英]C# HttpWebResponse, WebException
因此,我對C#還是比較陌生,但是我使用過其他語言。 目前,我正在編寫自定義MineCraft啟動器。 我正在使用Yggdrasil身份驗證文檔來幫助我做到這一點。 它說:如果請求成功,服務器將響應:
但是,如果請求失敗,服務器將響應:
我已經解決了第一部分,但是第二部分是問題所在!
HttpWebResponse httpResponse = null;
try
{
httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
string result = streamReader.ReadToEnd();
Console.WriteLine(result);
}
}
catch (WebException e)
{
Console.WriteLine(e.ToString());
}
如您所見,如果發生WebException,例如我收到403 Forbidden錯誤,則無法讀取內容。 我只是得到一個NullReferenceException。
因此,問題是:如果HttpWebRequest失敗,如何獲取WebResponse?
請檢查以下方法以獲取狀態碼。
HttpWebResponse httpResponse = null;
try
{
httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
string result = streamReader.ReadToEnd();
Console.WriteLine(result);
}
}
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.ProtocolError)
{
var response = ex.Response as HttpWebResponse;
if (response != null)
{
Console.WriteLine("HTTP Status Code: " + (int)response.StatusCode);
}
else
{
// no http status code available
}
}
else
{
// no http status code available
}
}
您仍然可以使用WebException.Response屬性讀取響應內容:
HttpWebResponse httpResponse = null;
try
{
httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
string result = streamReader.ReadToEnd();
Console.WriteLine(result);
}
}
catch (WebException e)
{
Console.WriteLine(e.ToString());
string responseText;
using (var reader = new StreamReader(webException.Response.GetResponseStream()))
{
responseText = reader.ReadToEnd();
}
Console.WriteLine("WebException caught. Response text is {0}", responseText);
}
您可以嘗試這樣的事情:
var response = e.Response as HttpWebResponse;
if (response!=null && response.StatusCode != HttpStatusCode.OK)
{
Console.WriteLine("HTTP Error Code is: " + (int)response.StatusCode);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.