Опубликовать JSON на контроллере mvc3 из приложения WinForms - PullRequest
0 голосов
/ 12 марта 2012

У меня есть контроллер / действие в приложении 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) в контроллере, чтобы я мог аутентифицироваться?

1 Ответ

0 голосов
/ 12 марта 2012

(для полноты ...)

Вы никогда не можете быть слишком уверены, правильно ли вы сформулировали запрос.Лично я обнаружил, что проще отслеживать и сравнивать звонки, используя Fiddler , а затем уточнять и эмулировать при необходимости ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...