代码之家  ›  专栏  ›  技术社区  ›  Quribe

无法使用fetch-api将数字数组传递给HttpPost方法

  •  0
  • Quribe  · 技术社区  · 1 年前

    我想将两个属性传递到后端,一个是 number ,另一个是 number[] .

    在后端,我有一个使用HTTPPOST方法的函数:

    public async Task<IActionResult> UpdateUserSubscriptions(int infocenterId, int[] subscriptions)
    {
        try
        {
            int rowsAffected = await repo.UpdateUserSubscriptionsAsync(infocenterId, subscriptions);
    
            return Ok(rowsAffected);
        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);
        }
    }
    

    我试着用fetch来称呼它:

    async UpdateUserSubscriptionsAsync(infocenterId: number, subscriptions: number[]): Promise<void> {
    
        var resp = await fetch(`api/Improvements/UpdateUserSubscriptions`, {
            method: 'POST',
            body: JSON.stringify({
                infocenterId: infocenterId,
                subscriptions: subscriptions
            }),
            headers: { "Content-Type": "application/json" },
            credentials: "include"
        })
    
        if (resp.status >= 400) throw new Error(`[ImprovementsDbHandler UpdateUserSubscriptionsAsync]: ${await resp.text()}`)
    }
    

    但我得到了状态400,错误显示:

    JSON值无法转换为 System.Int32[]

    JSON是这样的:

    {"infocenterId":320,"subscriptions":[9,11]}
    

    可能是什么问题?

    1 回复  |  直到 1 年前
        1
  •  2
  •   Yong Shun    1 年前
    1. 使用将从前端传递的属性创建一个模型类。
    public class UpdateUserSubscriptionsModel
    {
        public int InfocenterId { get; set; }
        public int[] Subscriptions { get; set; }
    }
    
    1. 修改 UpdateUserSubscriptions 参数,期望接收的对象 UpdateUserSubscriptionsModel 类型
    public async Task<IActionResult> UpdateUserSubscriptions([FromBody] UpdateUserSubscriptionsModel model)
    {
        try
        {
            int rowsAffected = await repo.UpdateUserSubscriptionsAsync(model.InfocenterId , model.Subscriptions );
    
            return Ok(rowsAffected);
        }
        catch (Exception ex)
        {
            return BadRequest(ex.Message);
        }
    }
    

    参考: Using [FromBody]