首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# HttpWebResponse,WebException

C# HttpWebResponse,WebException
EN

Stack Overflow用户
提问于 2015-04-24 07:20:24
回答 3查看 2.6K关注 0票数 0

因此,我对C#相当陌生,但我也使用过其他语言。目前,我正在编写一个定制的MineCraft启动程序。我正在使用Yggdrasil身份验证文档来帮助我做到这一点。它说:如果请求成功,服务器将响应:

  • 状态代码200
  • 根据以下规范编写的JSON编码字典

但是,如果请求失败,服务器将响应:

  • 一个适当的非200 HTTP状态代码
  • 遵循这种格式的JSON编码字典:

我已经解决了第一部分,但第二部分是问题所在!

代码语言:javascript
复制
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禁止的错误,我无法读取内容。我只需要一个NullReferenceException。

因此,问题是:如果WebResponse失败,如何获得HttpWebRequest?

EN

回答 3

Stack Overflow用户

发布于 2015-04-24 07:44:10

请检查以下方法以获得状态代码。

代码语言:javascript
复制
     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
    }
}
票数 0
EN

Stack Overflow用户

发布于 2015-04-24 07:46:13

仍然可以使用WebException.Response属性读取响应内容:

代码语言:javascript
复制
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);
}
票数 0
EN

Stack Overflow用户

发布于 2015-04-24 08:10:17

你可以试试这样的东西:

代码语言:javascript
复制
        var response = e.Response as HttpWebResponse;
         if (response!=null && response.StatusCode != HttpStatusCode.OK)
        {
            Console.WriteLine("HTTP Error Code is: " + (int)response.StatusCode);
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29841123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档