从WinForms应用程序将JSON发布到mvc3控制器

本文关键字:mvc3 控制器 JSON WinForms 应用程序 | 更新日期: 2023-09-27 18:27:34

我在ASP.NET MVC3应用程序中有一个控制器/操作。它处理用户登录的发布请求。我正在尝试模拟,但从桌面winForms应用程序。

我的控制器看起来像这样:

  [HttpPost]
  [AllowAnonymous]
  public virtual ActionResult LogOn(LogOnModel model, string returnUrl)
  {
    //authenticate user logic
  }

我以这种方式生成HTTP请求:

public static bool AuthenticateClient(客户端,字符串用户名,字符串密码){//将这些字段名更改为登录页面所需的任何元素string usernameField=用户名;string 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;
    }

通常,我可以从jQuery发出Ajax请求,并向它传递控制器操作所期望的相同对象参数(在本例中为LogonModel),然而,当我从桌面应用程序中这样做时,每次操作中它都显示为null。

所以我的问题是,我如何从桌面winforms应用程序发出请求,并在控制器中填充对象(LogonModel),以便进行身份验证?

从WinForms应用程序将JSON发布到mvc3控制器

(为了完整性…)

你永远都不能太确定你的请求是否正确。就我个人而言,我发现使用Fiddler监控和比较通话更容易,然后根据需要进行细化和模拟。。。