7

我正在努力在 .NET中的HttpWebRequest/类型之上构建一个流畅的 REST 客户端界面。HttpWebResponse到目前为止,一切都很好......但是我正在尝试开发一个可插入的安全框架,可以自动处理安全令牌协商、令牌刷新等。

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

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

(哦,简直无法抗拒......向我在 RedGate 的好朋友们大声疾呼,因为他们非法拿走了 Reflector 6 的许可绑定免费版本......我也许能弄清楚这个如果我可以窥探代码,就靠我自己……但是唉……遗憾的是,Reflector 是一个不可行的选择,因为它已经通过自溶消耗了自己。;P)

4

1 回答 1

8

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

public static HttpWebResponse MakeRequest(HttpWebRequest request)
{
    try
    {
        return (HttpWebResponse)request.GetResponse();
    }
    catch (WebException we)
    {
        if (we.Response != null)
        {
            return (HttpWebResponse)we.Response;
        }
        throw;
    }
}
于 2011-06-08T12:52:16.430 回答