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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:49:39