ASP.NET Core Blazor API中FromQuery参数始终返回null的问题求助
ASP.NET Core Blazor API中FromQuery参数始终返回null的问题求助
你好,我遇到了一个问题:我的API端点接收查询字符串参数,但即使传递了值,返回的参数值始终是null。
以下是我Blazor Web应用中的方法:
public async Employee GetEmployee(EmployeeDetails details) { var qString = string.Empty; if (details != null) { if (details.EmployeeId != null) { qString += "empId=" + details.EmployeeId; var employee = await _httpClient.GetAsync($"api/EmployeeData/GetData?{qString}"); return employee; } } }
我的API中员工数据控制器的端点如下:
public async Task<ActionResult<Employee>> GetData([FromQuery] string? Id) { // 这里的查询字符串Id的值始终是null。 }
我是不是漏掉了什么?有人能给我指个方向吗?
提前感谢!
这问题我之前也碰到过,核心原因其实很简单——查询字符串的参数名称和API控制器的参数名不匹配,导致ASP.NET Core的模型绑定没法正确映射值,所以Id一直是null。我给你两个解决思路,选哪个都可以:
方案一:修改Blazor端的参数名,和API对齐
把你构造查询字符串时的键从empId改成Id,和控制器的参数名保持一致:
qString += "Id=" + details.EmployeeId;
方案二:修改API端的绑定名称,匹配Blazor的请求
如果不想改Blazor的代码,可以给控制器的参数加上Name属性,指定它对应查询字符串里的empId:
public async Task<ActionResult<Employee>> GetData([FromQuery(Name = "empId")] string? Id) { // 现在就能正确拿到传递过来的empId值了 }
另外还有个小细节要提醒你:你的Blazor方法GetEmployee返回的是Employee类型,但_httpClient.GetAsync返回的是HttpResponseMessage,直接返回这个对象是不对的,得解析响应内容才行,比如改成这样:
var response = await _httpClient.GetAsync($"api/EmployeeData/GetData?{qString}"); response.EnsureSuccessStatusCode(); // 先确保请求没有出错 var employee = await response.Content.ReadFromJsonAsync<Employee>(); return employee;
按照上面的方法调整后,应该就能解决你的问题啦!
备注:内容来源于stack exchange,提问作者KeTa16
相关产品推荐
相关产品推荐

