У меня есть контроллер / действие в приложении ASP.NET MVC3. Он обрабатывает почтовый запрос для входа пользователя. Я пытаюсь смоделировать это, но из настольного приложения WinForms.
Мой контроллер выглядит так:
[HttpPost]
[AllowAnonymous]
public virtual ActionResult LogOn(LogOnModel model, string returnUrl)
{
//authenticate user logic
}
Я генерирую свой HTTP-запрос следующим образом:
public static bool AuthenticateClient (клиентский клиент, строковое имя пользователя, строковый пароль)
{
// меняем имена этих полей на те элементы, которые ожидает ваша страница входа
строка usernameField = username;
строка passwordField = пароль;
string loginUrl = "http://localhost/Account/LogOn/";
// format login request
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(loginUrl);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.AllowAutoRedirect = false;
request.CookieContainer = new CookieContainer();
// format and send login data
string requestData = JSON.Serialize(new LogOnModel(usernameField, passwordField, false));
StreamWriter sw = new StreamWriter(request.GetRequestStream());
sw.Write(requestData);
sw.Close();
// get the login response
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream());
string responseData = sr.ReadToEnd();
sr.Close();
// retrieve the session ID
string sessionId = null;
foreach (Cookie cookie in response.Cookies)
{
if (cookie.Name == AuthCookieName)
{
sessionId = cookie.Value;
}
}
// could not authenticate
if (sessionId == null)
{
return false;
}
// send the session ID with every request
client.OnRequestCreated = (args) =>
{
args.Request.Headers["Cookie"] = string.Format("{0}={1}", AuthCookieName, sessionId);
};
return true;
}
Как правило, я могу делать запросы Ajax из jQuery и передавать ему те же параметры объекта, что и ожидаемое действие контроллера (в данном случае LogonModel), однако, когда я делаю это из моего настольного приложения, он отображается как нуль меня каждый раз в действии.
Итак, мой вопрос, как я могу сделать запрос из моего приложения winforms на рабочем столе и заполнить объект (LogonModel) в контроллере, чтобы я мог аутентифицироваться?