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

Blazor Server端WebAPI如何仅返回employeeID数组而非任务状态信息

问题解决:WebAPI返回仅含EmployeeID的对象数组

问题根源

你代码里的reader.GetFieldValueAsync<string>(0)是异步方法,没有添加await关键字,导致实际存入集合的是Task<string>对象而非字符串值。JSON序列化时会把Task对象的所有属性(如result、status等)都输出,这就是返回结果里出现多余状态字段的原因。

修改后的接口代码

给GetFieldValueAsync添加await,获取实际的字符串值:

[HttpGet]
[Route("GetAllEmployee/{searchText}")]
public async Task<IActionResult> GetAllEmployee(string searchText)
{
    string query = "SELECT cast(EMP.YAAN8 as varchar(20)) as EmployeeID,EMP.YAALPH AS EmployeeName FROM CRPDTA.F060116 EMP WHERE cast(EMP.YAAN8 as varchar(20)) LIKE '%" + searchText + "%' WITH UR";

    try
    {
        ICollection<object> ApplicationsDataValues = new List<object>();
        using (var command = con.CreateCommand())
        {
            command.CommandText = query;
            command.CommandType = CommandType.Text;

            await command.Connection.OpenAsync();

            using (var reader = await command.ExecuteReaderAsync())
            {
                while (await reader.ReadAsync())
                {
                    ApplicationsDataValues.Add(new
                    {
                        // 添加await获取实际字符串值
                        EmployeeID = await reader.GetFieldValueAsync<string>(0)
                    });
                }
            }
        }
        await con.CloseAsync();
        return StatusCode(200, ApplicationsDataValues);
    }
    catch (Exception e)
    {
        return StatusCode(500, e);
    }
}

额外优化建议

  1. 避免SQL注入风险:当前代码直接拼接searchText到SQL语句中,存在SQL注入漏洞,建议改用参数化查询:
query = "SELECT cast(EMP.YAAN8 as varchar(20)) as EmployeeID,EMP.YAALPH AS EmployeeName FROM CRPDTA.F060116 EMP WHERE cast(EMP.YAAN8 as varchar(20)) LIKE @searchText WITH UR";
// 添加参数
command.Parameters.AddWithValue("@searchText", $"%{searchText}%");
  1. 使用强类型模型:可以定义一个简单的EmployeeDto类代替匿名对象,提高代码可读性和可维护性:
public class EmployeeDto
{
    public string EmployeeID { get; set; }
}
// 集合改为List<EmployeeDto>
List<EmployeeDto> ApplicationsDataValues = new List<EmployeeDto>();
// 添加时实例化Dto
ApplicationsDataValues.Add(new EmployeeDto
{
    EmployeeID = await reader.GetFieldValueAsync<string>(0)
});

修改后预期返回结果

修改后接口会返回符合预期的JSON:

[
    {
        "employeeID": "212334"
    },
    {
        "employeeID": "212331"
    }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:53:10