WebAPI - 属性路由 POST 不适用于 WebAPI Cors? [英] WebAPI - Attribute Routing POST not working with WebAPI Cors?

查看:24
本文介绍了WebAPI - 属性路由 POST 不适用于 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;
    }
}

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

The OPTIONS request can pass through but POST fails.

选项标题:

选项响应:

POST 标头:

POST 响应:

知道我做错了什么吗?

推荐答案

你已经用 [HttpPost("login/{username}/{password}")] 定义了你的路由,但是你没有'不要在 url 中发送用户名和密码,而是在请求正文中发送,因此您的路由不匹配,因此您得到 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("login")]

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

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