我正在基于.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)
答案 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;
}
}