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
相关产品推荐
相关产品推荐

