WebAPI - 属性路由POST不能与WebAPI Cors一起使用?

时间:2013-08-03 20:25:14

标签: post asp.net-web-api cors

我有以下控制器,它应该接受用户名和密码作为POST中的有效负载。如果我把它改成HttpGet就行了。

[RoutePrefix("api")]
public class AccountController : ApiController
{
    [HttpPost("login/{username}/{password}")]
    [AcceptVerbs("POST")]
    public Login Login(string username, string password)
    {
        Login login = new Login();
        if (username == "user" && password == "pw") login.Success = true;
        else login.Success = false;
        return login;
    }
}

OPTIONS请求可以通过,但POST失败。

enter image description here

OPTIONS标题:

enter image description here

OPTIONS响应:

enter image description here

POST标题:

enter image description here

POST回复:

enter image description here

知道我做错了吗?

1 个答案:

答案 0 :(得分:14)

您已使用[HttpPost("login/{username}/{password}")]定义了路线,但未在网址中发送用户名和密码,而是在请求正文中,因此您的路线不匹配,因此您获得了404。

因此您需要将路线更改为[HttpPost("login")]

本身它不起作用,因为使用Web.API你不能有来自请求体的多个动作参数,所以你需要一个复杂的类型:

public class LoginInfo {
    public string username { get; set; }
    public string password { get; set; }
}

因此,固定操作应如下所示:

[HttpPost("login")]
[AcceptVerbs("POST")]
public Login Login(LoginInfo loginInfo)
{
    Login login = new Login();

    if (loginInfo.username == "user" && loginInfo.password == "pw") {
        login.Success = true;
    } else {
        login.Success = false;
    }

    return login;
}