WebAPI - 属性路由POST不能与WebAPI Cors一起使用? [英] WebAPI - Attribute Routing POST not working with WebAPI Cors?

查看:260
本文介绍了WebAPI - 属性路由POST不能与WebAPI Cors一起使用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下控制器,它应该在POST中接受用户名和密码作为有效负载。如果我改变它为HttpGet它工作。

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

OPTIONS请求可以通过但POST失败。 / p>

>



OPTIONS标题:





选项回应:





POST标题:





POST回应:



>



任何想法我做错了什么?

解决方案

[HttpPost(login / {username} / {password})] ,但是你不发送usename和密码在url,路由不匹配,所以你得到404。



所以你需要改变你的路由到 [HttpPost(login)] code>



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

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

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

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

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

return login;
}


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;
    }
}

The OPTIONS request can pass through but POST fails.

OPTIONS header:

OPTIONS response:

POST header:

POST response:

Any idea what I'm doing wrong?

解决方案

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.

So you need to change your route to [HttpPost("login")]

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆