使用 Axios 到 ASP.Net Core Controller 请求时,所有变量都为空

Dan*_*man 5 javascript asp.net ajax asp.net-core axios

这是我的客户端请求代码:

import request from 'axios';

//...

     let url = 'Login/SignIn',
                headers = {
                    headers: {
                        'Content-Type': 'application/json'
                    }
                },
                data = JSON.stringify( {
                    name: 'danil',
                    password: 'pwd'
                });

     request.post(url, data, headers);
Run Code Online (Sandbox Code Playgroud)

乍一看还不错。

请求在此处待处理: 在此处输入图片说明

但这一切都在我的控制器中结束了:

在此处输入图片说明

这是代码顺便说一句:

[HttpPost]
        public async Task<ActionResult> SignIn([FromBody]string name, [FromBody]string password)
        {

            var userLoginCommand = new UserLogInCommand {
                Login = name,
                Password = password
            };

            await _dispatcher.DispatchAsync(userLoginCommand);
            return Content(userLoginCommand.Result, "application/json");
        }
Run Code Online (Sandbox Code Playgroud)

它出什么问题了?我忘记了什么?

我尝试JSON.stringify通过添加和删除来尝试,尝试不发送标头(然后抛出415 error)但没有更改。仍然有空值。

UPD:正如阿里在评论中建议的那样,如果我们LoginModel像这样使用它,传递数据就可以了:

 public class LoginModel
        {
            public string name { get; set; }
            public string password { get; set; }
        }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但是为什么它不能以简单的方式像那样工作呢?

Dan*_*tac 1

消息体中只允许读取一个参数。在您的示例中,您有两个具有 FromBody 属性的参数,这就是您具有空值的原因。

请在此处查找文档: https://learn.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

“最多允许从消息体中读取一个参数。”