2014-05-13 48 views
4

我使用WEB API 2.网页API路由和HTTP POST

建立一个API,我有以下API控制器:

[RoutePrefix("api/account")] 
public class AccountController : ApiController 
{ 
    [Route("login")] 
    [HttpPost] 
    public IHttpActionResult AuthenticateUser(string username, string password) 
    { 
     if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) 
     { 
      return BadRequest("You must submit username and password"); 
     } 

     if (!Membership.ValidateUser(username, password)) 
     { 
      return BadRequest("Incorrect username or password"); 
     } 

     FormsAuthentication.SetAuthCookie(username, true); 

     return Ok(); 
    } 
} 

和jQuery功能:

<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() { 
        location.reload(); 
       } 
      }); 
     }); 
    }); 
</script> 

当我提交登录表单,我在Google Chrome控制台中看到以下错误:

POST http://localhost:60898/api/account/Login/ 404 (Not Found) 

如何创建接受HTTP POST的路由?

谢谢!

+0

您有'login'作为操作名称,但将其称为'Login'。不确定但可能区分大小写? – Sam

回答

9

我很抱歉,我没有看到这个帖子:WebAPI - Attribute Routing POST not working with WebAPI Cors?

我已经更新了我的API控制器是这样的:

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

    [Route("login")] 
    [HttpPost] 
    public IHttpActionResult AuthenticateUser(LoginInfo loginInfo) 
    { 
     if (string.IsNullOrEmpty(loginInfo.username) || string.IsNullOrEmpty(loginInfo.password)) 
     { 
      return BadRequest("You must submit username and password"); 
     } 

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

     FormsAuthentication.SetAuthCookie(loginInfo.username, true); 

     return Ok(); 
    } 
} 

而现在一切工作正常。