2014-10-22 90 views
0

我已经搜索了至少一个半小时,我没有更接近学习如何在我的ApiController中使用POST方法。我需要一种有效的方式来使用post创建一个登录系统,该系统将根据用户名/密码组合搜索我的数据库,并创建一个JSON对象,然后将其发送回我的网页。任何资源使用后?我试图用GET来acomplish这一点,但我可以用任何变量多于“ID”如何在ApiController中使用POST

public IHttpActionResult GetLogin(string id) 
     { 
      //Query Database for Unique username. 

      if (id == "mager1794") 
      { 

       //Create Login class with username, and password details. 
       return Ok(new Models.Login() { id = 1, userName = "mager1794", passWord = "*******" }); 
      } 


      return Ok(-1); 
     } 

这是我有我的Get方法,但我只是没有任何运气创建的POST版本这个。

回答

1

也许是这样的:

[RoutePrefix("api/account")] 
public class AccountController : ApiController 
{ 
    public class LoginInfo 
    { 
     [Required] 
     public string Username { get; set; } 

     [Required] 
     public string Password { get; set; } 
    } 

    [Route("login")] 
    [HttpPost] 
    public IHttpActionResult AuthenticateUser(LoginInfo loginInfo) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     if (!Membership.ValidateUser(loginInfo.Username, loginInfo.Password)) 
     { 
      ModelState.AddModelError("", "Incorrect username or password"); 
      return BadRequest(ModelState); 
     } 

     FormsAuthentication.SetAuthCookie(loginInfo.Username, true); 

     return Ok(); 
    } 
} 

客户端:

<form action="#" id="login-form"> 
    <label for="username">Username:</label> 
    <input type="text" name="username" id="username"/> 

    <label for="password">Password:</label> 
    <input type="password" name="password" id="password"/> 
    <div><input type="submit"/></div> 
</form> 

<script> 
    $(document).ready(function() { 
     $("#login-form").submit(function (e) { 
      e.preventDefault(); 

      var username = $('#username').val(); 
      var password = $('#password').val(); 

      $.ajax({ 
       type: 'POST', 
       url: '/api/account/Login/', 
       data: { Username: username, Password: password }, 
       success: function() { 
        // refresh the page if username and password are correct 
        location.reload(); 
       } 
      }); 
     }); 
    }); 
</script> 
+0

你是一个生命的救星人,代码并没有出于某种原因,但所有我需要做的就是改变函数的名称为'Post',它在我的下一次尝试中起作用。非常感谢! – 2014-10-22 08:18:51