当我们在Asp.Net Core 3.1中使用Ajax时,如何将原始值(字符串,整数)绑定到动作的参数?

时间:2020-06-19 11:11:30

标签: asp.net-core asp.net-core-mvc

我正在使用Asp.Net Core 3.1开发Web应用程序,我进行了ajax调用(使用axios库,方法是POST):

<script>
    axios({
        url: '/home/test', // HomeController/Test Action
        method: 'post',
        data: {
            abc: 123
        },
    })
        .then(function (response) {
        console.log(response);
    })
        .catch(function (error) {
            console.log(error);
        });
</script>

在我的HomeController中,我有相应的操作:

[HttpPost]
public IActionResult Test(string abc)
{
    return Json(new { abc });
}

在这种情况下,即使我添加[FromBody]属性,例如:

,绑定也无法正常工作
[HttpPost]
public IActionResult Test([FromBody]string abc)
{
    return Json(new { abc });
}

在这种情况下有什么解决方案?

2 个答案:

答案 0 :(得分:0)

您可以使用FormData()将axios数据传递到控制器:

 <script>
        var bodyFormData = new FormData();
        bodyFormData.set('abc', 123);
        axios({
            url: '/Home/test', // HomeController/Test Action
            method: 'post',
            data: bodyFormData,
        })
            .then(function (response) {
                console.log(response);
            })
            .catch(function (error) {
                console.log(error);
            });
    </script>

这是测试结果:

enter image description here

答案 1 :(得分:0)

有时,绑定的FromBody无法解析正文中的html内容。尝试将参数类型从字符串更改为动态。它应该命中您的控制器。 您可以将参数包装到仅具有该字段的类中,并且在那里进行绑定。

您还可以利用动作约束并尝试尝试

HttpPost("{abc:string}")

希望获得帮助