我已经为HttpWebRequest编写了一个扩展方法,它会检查一些属性并且有一般的失败结果。
我想要处理的其中一个失败是407 Proxy Authentication Required。 发生这种情况时,我会向用户显示一个登录掩码,并使用返回的用户/密码作为凭据并开始新的请求。
我目前面临的问题是我无法使用原始请求(现在使用代理凭据)重新发出请求。我也没有从旧请求中获取数据以填写新数据:/
你如何在c#中优雅地处理407?
我目前想要使用的代码如下所示:
public static class WebRequestExtension
{
public static HttpWebResponse GetResponseWithProxyCheck(this HttpWebRequest request)
{
return GetResponseWithProxyCheck(request, 0);
}
private static HttpWebResponse GetResponseWithProxyCheck(this HttpWebRequest request, int numberOfCalls)
{
try
{
if (request.Proxy != null && credential != null)
request.Proxy.Credentials = credential;
return (HttpWebResponse)request.GetResponse();
}
catch (WebException w)
{
var webResponse = w.Response as HttpWebResponse;
if (webResponse.StatusCode == HttpStatusCode.ProxyAuthenticationRequired && numberOfCalls < 3)
{
ProxyDialog pd = new ProxyDialog();
var ret = pd.ShowDialog();
if (ret == DialogResult.OK)
{
credential = new NetworkCredential(pd.User, pd.Password);
var newRequest = (HttpWebRequest);// somehow duplicate the old Request
return newRequest.GetResponseWithProxyCheck(numberOfCalls + 1);
}
}
throw;
}
}
private static ICredentials credential;
}