有没有办法在400/500状态代码上更改HttpWebRequest行为?

时间:2011-05-06 22:16:18

标签: httpwebrequest webexception custom-error-handling

我正在基于.NET中的HttpWebRequest / HttpWebResponse类型构建流畅的REST客户端界面。到目前为止,这么好......但是我正在尝试开发一个可插拔的安全框架,它可以自动处理安全令牌协商,令牌刷新等。

由于HttpWebRequest/Response在遇到400系列或500系列HTTP状态代码时的工作性质,我遇到了问题。他们不是简单地设置.StatusCode.StatusDescription属性并允许您以任何方式处理,而是抛出WebException。一般来说,这可能不是问题......但是我们验证的方式(OAuth 2.0的派生),我需要处理某些400系列错误而不会发生异常。

有没有办法将HttpWebRequest / Response重新配置为NOT throw WebException,并允许消费者确定自己的错误处理?我知道有一些关于使用旧的Http1.0服务器处理Expect-100-Continue的方法......我很好奇是否有类似的循环方式来禁用WebExceptions。

(哦,只是无法抗拒......在RedGate因为非法带走反映许可证的免费版Reflector 6而向我的精彩朋友大吼大叫......我可能能够想到如果我可以窥探代码,那么我自己就可以了...但是......反射器现在可以通过自溶来消耗它自己是一个不可行的选择。; P)

1 个答案:

答案 0 :(得分:8)

我遇到了类似的问题,并使用以下帮助方法解决了这个问题:

public static HttpWebResponse MakeRequest(HttpWebRequest request)
{
    try
    {
        return (HttpWebResponse)request.GetResponse();
    }
    catch (WebException we)
    {
        if (we.Response != null)
        {
            return (HttpWebResponse)we.Response;
        }
        throw;
    }
}