的WebAPI - 属性路由POST不会的WebAPI一个Cors工作吗? [英] WebAPI - Attribute Routing POST not working with WebAPI Cors?
问题描述
我有以下的控制器,它应该接受用户名和密码在POST的有效载荷。如果我将其更改为HTTPGET它的工作原理。
I have the following controller which should accept username and password as payload in a POST. If I change it to HttpGet it works.
[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;
}
}
选项请求可以通过,但POST失败。
The OPTIONS request can pass through but POST fails.
选项头:
OPTIONS响应:
OPTIONS response:
POST头:
POST响应:
任何想法,我做错了吗?
Any idea what I'm doing wrong?
推荐答案
您已经用定义你的路线[HttpPost(登录/ {用户名} / {密码})]
但你不要在URL,但请求体发送USENAME和密码,以便您的路线不符合,所以你得到404
You have defined your route with [HttpPost("login/{username}/{password}")]
but you don't send the usename and password in the url but in the request body so your route doesn't match so you get the 404.
所以,你需要你的路线更改为 [HttpPost(登录)]
So you need to change your route to [HttpPost("login")]
在本身不会因为Web.API工作,你不能有多个操作的参数请求主体来,所以你需要一个复杂类型:
In itself it won't work because with Web.API you cannot have multiple action arguments coming from the request body so you need a complex type:
public class LoginInfo {
public string username { get; set; }
public string password { get; set; }
}
因此,对于固定的动作应该是这样的:
So for fixed action should look like this:
[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;
}
这篇关于的WebAPI - 属性路由POST不会的WebAPI一个Cors工作吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!