【问题标题】:Why is the value that my controller recieves from Axios always null?为什么我的控制器从 Axios 收到的值总是为空?
【发布时间】:2021-06-16 06:02:26
【问题描述】:

我有一个简单的 Axios 调用:

 var payload = "this is a test";
 const dt = { rockText: payload };
 const request = axios.put(`/api/rocks/${rockId}/rockText`, dt);

它像这样连接到控制器:

    [HttpPut("{id}/rockText")]
    public IActionResult PutRockText(Int32 id, [FromBody] string rockText)
    { ... }

rockText 在控制器中总是为空,尽管我知道它不是在被 Axios 使用时。

我尝试了很多 Axios 调用的变体,但它始终为空。

我怎样才能让它工作?

【问题讨论】:

  • 哪方面的问题 - 使来自不同客户端的请求有效吗?
  • @jonrsharpe 我现在只有一个客户
  • 邮递员,curl,fetch 在您的浏览器中,...?您需要进行一些基本调试,以便了解是否需要修复请求的发送或接收。
  • @jonrsharpe 对不起,我明白你的意思了。我通过 Postman 尝试过,它在 api 方面也是空的。
  • @jonrsharpe 但id 可以通过。 ://

标签: javascript c# asp.net-core axios asp.net-core-webapi


【解决方案1】:

如果你想用axios传递json数据,需要设置Content-Type,这里有一个demo:

axios(我用1代替${rockId}来测试):

var payload = "this is a test";
const request = axios.put(`/api/rocks/1/rockText`, JSON.stringify(payload),
               { headers: { 'Content-Type': 'application/json' } });

控制器:

[HttpPut("{id}/rockText")]
public IActionResult PutRockText(int id,[FromBody]string rock)
{
     return Ok();
}

结果:

【讨论】:

    【解决方案2】:

    问题是模型绑定器无法解析有效负载。原因是它需要一个字符串,但您实际上传递的是一个带有属性 rockText 的 json 对象。

    我会创建一个类来表示您发送的 json:

    public class Rock
    {
        public string RockText { get; set; }
    }
    
    
    [HttpPut("{id}/rockText")]
    public IActionResult PutRockText(Int32 id, [FromBody] Rock rock)
    { ... }
    

    或者,您可以尝试从 axios 传递字符串:

    var payload = "this is a test";
    const request = axios.put(`/api/rocks/${rockId}/rockText`, payload);
    

    【讨论】:

    • 谢谢我把它改成了你的第二个例子,但它仍然是空的......虽然 rockId 可以通过
    • @SkyeBoniwell 你尝试了我的第一个建议吗?这是我推荐的那个
    • 我刚刚做了,但它仍然为空:(
    • 我已经测试过了,它使用邮递员对我有用,你需要提供更多的调试细节@SkyeBoniwell
    猜你喜欢
    • 2023-03-05
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-11-23
    • 2017-04-07
    • 1970-01-01
    • 2021-08-22
    • 2012-11-05
    相关资源
    最近更新 更多