在C#中访问非公共HttpWebRequest._HttpResponse

时间:2011-02-24 23:42:26

标签: c# rest

我正在尝试使用C#对Google的OAuth进行身份验证,尽管我付出了最大努力,但我仍然收到了400条错误请求。

所以我的小

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

永远不会得到回应。我的回复对象永远不会被填充。

但谷歌会发送400s的数据。如果您将浏览器指向https://www.google.com/accounts/OAuthGetRequestToken

,则可以看到

我的问题是如何在C#中访问该信息?它似乎是在HttpWebRequest._HttpResponse的非公共成员中,但它是以字节数组形式,我无法读取或以编程方式访问它。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

您需要捕获抛出的404异常,如下所示:

HttpWebResponse response;
try
{
    response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
    response = (HttpWebResponse)ex.Response;
}

令人讨厌,IMO有点疏忽,但这是你使用HttpWebRequest课程的唯一方法。

答案 1 :(得分:0)

response对象永远不会被填充,因为request.GetResponse()在400错误时抛出了WebException

尝试这样的事情:

HttpWebResponse response;
bool isValid = false;

try
{
    response = (HttpWebResponse)request.GetResponse();
    isValid = true;
}
catch (WebException we)
{
    response = (HttpWebResponse)we.Response;
}

if (isValid)
{
    // the response was valid
}
else
{
    // the response returned a 400 error
}