nik*_*klr 11 post cors asp.net-web-api
我有以下控制器,它应该接受用户名和密码作为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;
}
}
Run Code Online (Sandbox Code Playgroud)
OPTIONS请求可以通过,但POST失败.

选项标题:

选项回复:

POST标题:

POST响应:

知道我做错了什么吗?
nem*_*esv 14
您已经定义了路线,[HttpPost("login/{username}/{password}")]但是您没有在网址中发送用户名和密码,而是在请求正文中发送,因此您的路线不匹配,因此您获得了404.
所以你需要改变你的路线 [HttpPost("login")]
本身它不会起作用,因为使用Web.API你不能有来自请求体的多个动作参数,所以你需要一个复杂的类型:
public class LoginInfo {
public string username { get; set; }
public string password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
所以对于固定动作应该如下所示:
[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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12907 次 |
| 最近记录: |