编辑:我想回过头来注意问题根本不是我的问题,而是另一个公司的代码.
我正在尝试使用基本身份验证来启动页面.我一直收到404 Page not found错误.我可以将我的网址复制并粘贴到浏览器中并且工作正常(如果我没有登录到他们的网站,它会弹出一个凭据框,否则它会打开我想要打开的内容).我必须到正确的地方并进行身份验证,因为如果我一方面输入了错误的用户名/密码,我得到一个401(未经过身份验证的错误),如果我在查询字符串中传递了一个错误的参数,我会收到内部服务器错误500 .我尝试使用Webclient和HttpWebRequest都导致相同的404未找到错误.
使用Webclient:
string url = "MyValidURLwithQueryString";
WebClient client = new WebClient();
String userName = "myusername";
String passWord = "mypassword";
string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(userName + ":" + passWord));
client.Headers[HttpRequestHeader.Authorization] = "Basic " + credentials;
var result = client.DownloadString(url);
Response.Write(result);
Run Code Online (Sandbox Code Playgroud)
使用HttpWebRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("MyValidURL");
string authInfo = "username:password";
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
request.Headers.Add("Authorization", "Basic " + authInfo);
request.Credentials = new NetworkCredential("username", "password");
request.Method = WebRequestMethods.Http.Get;
request.AllowAutoRedirect = true;
request.Proxy = null;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader streamreader = new StreamReader(stream);
string s = streamreader.ReadToEnd();
Response.Write(s);
Run Code Online (Sandbox Code Playgroud)
Ale*_*lex 88
//BEWARE
//This works ONLY if the server returns 401 first
//The client DOES NOT send credentials on first request
//ONLY after a 401
client.Credentials = new NetworkCredential(userName, passWord); //doesnt work
//So use THIS instead to send credentials RIGHT AWAY
string credentials = Convert.ToBase64String(
Encoding.ASCII.GetBytes(userName + ":" + password));
client.Headers[HttpRequestHeader.Authorization] = string.Format(
"Basic {0}", credentials);
Run Code Online (Sandbox Code Playgroud)
Bla*_*ake 25
尝试将Web客户端请求身份验证部分更改为:
NetworkCredential myCreds = new NetworkCredential(userName, passWord);
client.Credentials = myCreds;
Run Code Online (Sandbox Code Playgroud)
然后打电话,似乎对我来说很好.
the*_*zar 11
这部分代码对我来说很好:
WebRequest request = WebRequest.Create(url);
request.Method = WebRequestMethods.Http.Get;
NetworkCredential networkCredential = new NetworkCredential(logon, password); // logon in format "domain\username"
CredentialCache myCredentialCache = new CredentialCache {{new Uri(url), "Basic", networkCredential}};
request.PreAuthenticate = true;
request.Credentials = myCredentialCache;
using (WebResponse response = request.GetResponse())
{
Console.WriteLine(((HttpWebResponse)response).StatusDescription);
using (Stream dataStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(dataStream))
{
string responseFromServer = reader.ReadToEnd();
Console.WriteLine(responseFromServer);
}
}
}
Run Code Online (Sandbox Code Playgroud)