我正在尝试使用HTTPWebRequest来访问Web服务,并且在传递凭据时遇到问题,请参阅下面的代码.我可以看到在调试器中构建的凭证对象nc,以及request.Credentials的赋值,但是当我到达最后一行代码时,它会出现未经授权的错误消息.我让我们的服务器人员在服务器上查看请求,并且没有传递凭据.我在Credentials对象上做错了什么,或者我需要做些什么我不在这里做什么?
Uri requestUri = null; Uri.TryCreate("https://mywebserver/webpage"),UriKind.Absolute,out requestUri); HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create (requestUri); NetworkCredential nc = new NetworkCredential("user","password"); request.Credentials = nc; request.Method = WebRequestMethods.Http.Get; HttpWebResponse response = (HttpWebResponse)request.GetResponse();
解决方法
NetworkCredentials要么非常直观,要么不精确,或者两者兼而有之.无论如何,您可以通过完全绕过NetworkCredentials来解决问题,并使用此方法(我发现,由mark.michaelis.net提供)
/* http://mark.michaelis.net/Blog/CallingWebServicesUsingBasicAuthentication.aspx */ byte[] credentialBuffer = new UTF8Encoding().GetBytes(username + ":" +password); req.Headers["Authorization"] ="Basic " + Convert.ToBase64String(credentialBuffer);