Как проверить, что пользователь успешно вошел в веб-запрос - PullRequest
2 голосов
/ 21 декабря 2010

Я написал код и хорошо работает, я предоставляю ему имя пользователя и пароль, который реализует 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();

Ответы [ 3 ]

3 голосов
/ 21 декабря 2010

Вам нужен код ответа HTTP. Обычно 200 означает успех, 401 запрещен или 302 - перенаправление на страницу входа.

РЕДАКТИРОВАТЬ: На самом деле, вы отправляете на страницу входа в систему, поэтому 302 может указывать на успешный вход и перенаправление на страницу пользователя по умолчанию, это зависит от того, какой тип проверки подлинности включен на сервере, и от логики login.aspx.

0 голосов
/ 15 марта 2011

Если вы используете проверку подлинности на основе файлов cookie, то при успешном входе в систему сервер ответит файлом 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();  
0 голосов
/ 21 декабря 2010

Похоже, вам просто нужно посмотреть в ResponseStream, чтобы увидеть, какая информация была возвращена.

...