System.Net.NetworkCredential是FCL中一个密码身份验证的提供凭据类。今天我在一个.Net应用程序中,使用WebRequest请求一个网页,由于是在局域网当中,必须通过代理服务器材能够访问,设置了WebProxy和密码凭据后,访问网页出现407错误。其代码大致如下:
WebProxy _wpr = new WebProxy("http://isaserver:2000",true) ;
NetworkCredential _cred = new NetworkCredential(@"CropDomain/UserName","Password");
_wrp.Credentials = _cred;
WebRequest _wrq = WebRequest.CreateDefault(new Uri("page url"));
_wrq.Proxy = _wrp;
WebResponse _wrp = _wrq.GetResponse();
反复跟踪,检查了用户帐号、密码,正确无误,但是就是无法通过代理的验证。后来把第2句代码改成了:
NetworkCredential _cred = new NetworkCredential("UserName","Password","CropDomain");
KO!代码执行成功。
本来是想偷个懒的把用户帐号直接写在NetworkCredential构造函数的第一个参数里,没有想到这个参数其实只认用户名,而不会对包含域名的用户帐号做解析,害得我调试了一个上午。