Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查用户是否已成功登录webrequest_C#_Post_Httpwebrequest - Fatal编程技术网

C# 如何检查用户是否已成功登录webrequest

C# 如何检查用户是否已成功登录webrequest,c#,post,httpwebrequest,C#,Post,Httpwebrequest,我已经写了一个代码,执行得很好,我提供了用户名和密码,它实现了POST,但我不知道登录是否成功,有没有办法检查 var strId = UserName.Text; var strName = UserPass.Text; var encoding = new ASCIIEncoding(); var postData = "MainContent_LoginUser_UserName=" + strId + &MainContent_LoginUser_Password=" + str

我已经写了一个代码,执行得很好,我提供了用户名和密码,它实现了POST,但我不知道登录是否成功,有没有办法检查

var strId = UserName.Text;
var strName = UserPass.Text;
var encoding = new ASCIIEncoding();
var postData = "MainContent_LoginUser_UserName=" + strId + &MainContent_LoginUser_Password=" + strName + "&LoginButton";
byte[] data = encoding.GetBytes(postData);
var myRequest = (HttpWebRequest)WebRequest.Create("http://localhost:6226/WebSite1/Account/Login.aspx");

myRequest.Method = "POST";
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = data.Length;

var newStream = myRequest.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Close();

var response = myRequest.GetResponse();
var responseStream = response.GetResponseStream();

var responseReader = new StreamReader(responseStream);
textBox1.Text = responseReader.ReadToEnd();

看起来您只需要查看ResponseStream,查看返回了哪些信息

您需要HTTP响应代码。通常200表示成功,401表示禁止,302表示重定向到登录页面


编辑:实际上,您正在提交登录页面,因此302可能表示登录成功并重定向到默认用户页面,这取决于服务器上启用的身份验证类型以及login.aspx背后的逻辑。

如果使用基于cookie的身份验证,则登录成功时服务器将使用auth cookie进行响应

// Creating WebRequest  
var req = (HttpWebRequest)WebRequest.Create(ServerPath + controllerName + "/" + actionName);  
var coockieContainer = new CookieContainer();

// AuthCookie is static variable defined. Initially it will be null. But when server  
// respond with auth cookie then we have to store it and add to container for further  
// communication.  

if (AuthCookie != null)  
{  
    coockieContainer.Add(AuthCookie);  
}  
req.CookieContainer = coockieContainer;  

req.Headers.Add("SOAPAction", "\"\"");  
req.ContentType = "application/json; charset=utf-8";  
req.ContentLength = bytes.Length;  
req.Accept = "application/json, text/javascript, */*";  
req.Method = "POST";  
var stm = req.GetRequestStream();  
stm.Write(bytes, 0, bytes.Length);  
stm.Close();  
var resp = req.GetResponse();  

// If server respond with auth cookie then we have to store it.  
// Here I have used ".ASPXAUTH" name. You can have your own defined name
if (AuthCookie == null)  
{  
    AuthCookie = ((HttpWebResponse)resp).Cookies.Cast<Cookie>().Where(cook => 
cook.Name.Equals(".ASPXAUTH")).FirstOrDefault();  
    // Print the properties of each cookie.
    Console.WriteLine("Cookie:");
    Console.WriteLine("{0} = {1}", AuthCookie.Name, AuthCookie.Value);  
    Console.WriteLine("Domain: {0}", AuthCookie.Domain);  
    Console.WriteLine("Path: {0}", AuthCookie.Path);  
    Console.WriteLine("Port: {0}", AuthCookie.Port);  
    Console.WriteLine("Secure: {0}", AuthCookie.Secure);  
    Console.WriteLine("When issued: {0}", AuthCookie.TimeStamp);  
    Console.WriteLine("Expires: {0} (expired? {1})", AuthCookie.Expires, AuthCookie.Expired);  
    Console.WriteLine("Don't save: {0}", AuthCookie.Discard);  
    Console.WriteLine("Comment: {0}", AuthCookie.Comment);  
    Console.WriteLine("Uri for comments: {0}", AuthCookie.CommentUri);  
    Console.WriteLine("Version: RFC {0}", AuthCookie.Version == 1 ? "2109" : "2965");  

    // Show the string representation of the cookie.
    Console.WriteLine("String: {0}", AuthCookie.ToString());

}  

var stmr = new StreamReader(resp.GetResponseStream());  

var json = stmr.ReadToEnd();  
//创建WebRequest
var req=(HttpWebRequest)WebRequest.Create(ServerPath+controllerName+“/”+actionName);
var coockieContainer=新的CookieContainer();
//AuthCookie是定义的静态变量。最初它将是空的。但当服务器
//用auth cookie进行响应,然后我们必须存储它并将其添加到容器中以供进一步使用
//沟通。
if(AuthCookie!=null)
{  
coockieContainer.Add(AuthCookie);
}  
req.CookieContainer=CookieContainer;
添加(“SOAPAction”,“\”);
req.ContentType=“application/json;charset=utf-8”;
req.ContentLength=字节.Length;
req.Accept=“application/json,text/javascript,*/*”;
请求方法=“POST”;
var stm=req.GetRequestStream();
stm.Write(字节,0,字节.长度);
stm.Close();
var resp=req.GetResponse();
//如果服务器用auth cookie响应,那么我们必须存储它。
//这里我使用了“.ASPXAUTH”名称。您可以有自己定义的名称
if(AuthCookie==null)
{  
AuthCookie=((HttpWebResponse)resp.Cookies.Cast()。其中(cook=>
cook.Name.Equals(“.ASPXAUTH”).FirstOrDefault();
//打印每个cookie的属性。
控制台。WriteLine(“Cookie:”);
WriteLine(“{0}={1}”,AuthCookie.Name,AuthCookie.Value);
WriteLine(“域:{0}”,AuthCookie.Domain);
WriteLine(“路径:{0}”,AuthCookie.Path);
WriteLine(“端口:{0}”,AuthCookie.Port);
WriteLine(“Secure:{0}”,AuthCookie.Secure);
WriteLine(“发出时:{0}”,AuthCookie.TimeStamp);
WriteLine(“Expires:{0}(expired?{1})”,AuthCookie.Expires,AuthCookie.expired;
WriteLine(“不保存:{0}”,AuthCookie.Discard);
WriteLine(“注释:{0}”,AuthCookie.Comment);
WriteLine(“注释的Uri:{0}”,AuthCookie.CommentUri);
WriteLine(“Version:RFC{0}”,AuthCookie.Version==1?“2109”:“2965”);
//显示cookie的字符串表示形式。
WriteLine(“字符串:{0}”,AuthCookie.ToString());
}  
var stmr=newstreamreader(resp.GetResponseStream());
var json=stmr.ReadToEnd();

当使用不正确的用户名/密码登录(例如在Yahoo mail中)时,会返回什么响应代码?依赖HTTP响应代码是一个错误<代码>200正常是必需的,但还不够。大多数情况下,即使登录数据不正确,您也会得到
200 OK
,但页面包含有关登录失败的详细信息。