【问题标题】:Parameter value set to 0 when send parameter to Web API向 Web API 发送参数时参数值设置为 0
【发布时间】:2018-12-31 23:39:47
【问题描述】:

我有一个像这样调用 API 的函数

async addOffDayReplacement(employeeId: string, days: number) {
    console.log(days);
    await Axios.post('/api/v1/leaveQuota/' + employeeId, {
        params: {
            additionalDays: days
        }
    });
}

并且有API

[HttpPost("{id}")]
public async Task<ActionResult<bool>> Update(string id, int additionalDays)
{
    await leaveService.AddReplacement(id, additionalDays);
    return true;
}

但我的 API 中的 additionalDays 始终为 0,即使我从服务发送的值不是 0

有人知道为什么吗?以及如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    使用包含 AdditionalDays 属性的对象作为第二个参数。使用 [FromBody] 注释该参数。

    [HttpPost("{id}")]
    public async Task<ActionResult<bool>> Update(string id, [FromBody] Model model)
    {
        await leaveService.AddReplacement(id, model.AdditionalDays);
        return true;
    }
    

    不要忘记使用 AdditionalDays 公共属性定义 Model 类。

    详情请看这篇文章:https://weblog.west-wind.com/posts/2012/Sep/11/Passing-multiple-simple-POST-Values-to-ASPNET-Web-API

    【讨论】:

    • 我想你忘记了[FromBody] 注释
    • 感谢@ChrisSatchell。刚刚更新了答案。
    • 谢谢.. 我刚刚意识到,因为我收到了 'application/json',我只是无法接收单个 int 参数。我在模型和接口 javascript 中的变量名应该相同
    【解决方案2】:

    您需要指定绑定源,即您的函数如何访问它/参数如何传递(正文、查询等),所以使用

    [FromBody]int additionalDays

    应该为你解决。

    string id 起作用的原因是因为您在[HttpPost("{id}")] 中指定了它。

    我建议您查看https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-2.1 了解更多详细信息和示例。

    【讨论】:

    • 既然是 POST 请求,你的意思是 [FromBody]
    • @phuzi 不错,已修复
    • 我在发帖之前试过了。如果我使用 [frombody],我会收到错误 400
    猜你喜欢
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多