2012-03-12 57 views
0

我在ASP.NET MVC3應用程序中有一個控制器/動作。它處理用戶登錄的發佈請求。我試圖模擬,但從桌面winForms應用程序。從WinForms App發佈JSON到mvc3控制器

我的控制器看起來是這樣的:

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

我生成我的HTTP請求是這樣的:

公共靜態布爾AuthenticateClient(Client客戶端,用戶名字符串,字符串密碼){ // 將這些字段名稱更改爲您登錄頁面期望的任何元素 string usernameField = username; string passwordField = password;

 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在這種情況下)對同一對象的參數,但是,當我這樣做,從我的桌面應用程序,它顯示每次在行動中對我來說都是空的。

所以我的問題是,我如何從桌面winforms應用程序發出請求,並在控制器中填充對象(LogonModel)以便我可以進行身份​​驗證?

+0

代碼解決方案: 字符串=的RequestData的String.Format(「{0} = {1}和{2 } = {3}&RememberMe = false&Login = Login「, 」UserName「,Uri.EscapeDataString(username), 」Password「,Uri.EscapeDataString(password)); – 2012-03-12 14:47:21

回答

0

(爲了完整性......)

無論你是對的取景要求你永遠不能太肯定。就個人而言,我發現它更容易監測和使用Fiddler再細化,並根據需要模擬比較通話...