NetworkCredential是一个很好的解决方案,但您呼叫的站点必须处理未经授权的响应中的401和WWW-Authenticate标头。
客户:
request.Credentials = new CredentialCache {{aUri, "Basic", new NetworkCredential(aUserName, aPassword)}};
服务器:
Response.ClearContent(); Response.StatusCode = 401; Response.AddHeader("WWW-Authenticate", "Basic"); Response.End();
这将导致服务器的2次点击。初始调用将在没有凭据的情况下转到服务器。当服务器使用401和WWW-Authenticate标头(需要具有所需的身份验证类型)进行响应时,将使用请求中的凭据重新发送该请求。
我遇到了一个问题,如何将标识符/身份验证添加到标头。我通过以下方式找到了解决方案。
string _auth = string.Format("{0}:{1}", "myUser","myPwd"); string _enc = Convert.ToBase64String(Encoding.ASCII.GetBytes(_auth)); string _cred = string.Format("{0} {1}", "Basic", _enc); req.Headers[HttpRequestHeader.Authorization] = _cred;
这给了我想要的那些标题(粘贴Wireshark描述),
授权:基本bXlVc2VyOm15UHdk \ r \ n 凭据:myUser:myPwd
对于HTTP基本授权,您应该使用Credentials属性。
req.Credentials = new NetworkCredential("DDSServices", "jCole2011");
这应该做你想要的。而不是设置Authorization标头。