You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor WASM调用.NET Core 3.1 WebAPI的PutAsync返回400错误排查

问题分析与解决方案

我一眼就发现了导致PUT请求返回400 Bad Request的核心问题——你的服务类里没有正确替换URL中的{id}占位符!

问题所在

看你服务类中的这段代码:

var response = await _httpClient.PutAsync("Countries/{id}", content);

这里的"Countries/{id}"是一个固定字符串,HttpClient会直接把这个地址发送给API,也就是实际请求的URL是:
https://localhost:44395/api/Countries/{id}
而不是把{id}替换成你传入的实际id数值(比如1、10这类整数)。这就导致API的路由无法匹配,服务器直接返回400错误,请求根本到不了你的控制器方法。

修复方案

只需要把URL改成字符串插值形式,让传入的id参数值替换掉占位符:

public async Task UpdateAsync(int id, Country country)
{
    var json = JsonSerializer.Serialize(country);
    var content = new StringContent(json, Encoding.UTF8, "application/json");
    // 使用字符串插值替换{id}
    var response = await _httpClient.PutAsync($"Countries/{id}", content);
    if (!response.IsSuccessStatusCode)
    {
        throw new Exception();
    }
}

额外检查点(可选)

虽然你用APITester验证过API正常,但为了确保万无一失,你可以再确认以下两点:

  • 确保传入的country.Id和参数id数值一致:你的控制器里有if (id != country.Id)的判断,不匹配会直接返回Bad Request。
  • 确认Country类的序列化没问题:比如有没有用[JsonIgnore]标记了必要属性,或者属性名称和API模型不匹配(不过你测试过API,这点大概率没问题)。

内容的提问来源于stack exchange,提问作者JoeyD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 19:32:40