首页 > 解决方案 > GET json 嵌套对象属性。[来自查询]

问题描述

我正在尝试查询“UserType”对象,并获取属性“name”所以整个 JSON 对象是 User: 并且 api 调用应该如下所示: api/user?userTypeName=randomUserTypeName

我可以在其中搜索特定的 userTypeName,并返回名称。

接口调用:

在这里,我想使用 FromQuery,以便能够搜索 userTypeName 并检查 userTypeName 是否等于输入的名称。

// GET: /api/User/userTypeName
[HttpGet("{userTypeName}")]
public async Task<ActionResult<IEnumerable<User>>> GetAsync(([FromQuery(Name = "userTypeName")]string userTypeName) {
    var result = await ctx.User
        .Include(x => x.UserType)
        .Where(x => x.UserType.Name.ToLower() == UserTypeName.ToLower())
        .ToListAsync();

    if (result == null) return BadRequest();

    return result;
}

该对象如下所示:

{
    "id": 9,
    "userTypeId": 1,
    "userType": {
    "id": 1,
    "name": "randomUserTypeName",
    "users": 
    [
        {
            "id": 11,
            "userTypeId": 1,
            "userUrl": "https://userurl",
            "username": "eee",
            "password": "eee",
        }
    ]
}

标签: c#entity-frameworkasp.net-core-webapiasp.net-apicontroller

解决方案


如果您想userTypeName通过请求从 Route访问/api/User/userTypeName,您的操作应该是

[HttpGet("{userTypeName}")]
public async Task<ActionResult<IEnumerable<User>>> GetAsync(string userTypeName) {
    var result = await ctx.User
        .Include(x => x.UserType)
        .Where(x => x.UserType.Name.ToLower() == UserTypeName.ToLower())
        .ToListAsync();

    if (result == null) return BadRequest();

    return result;
}

如果您想userTypeName通过请求从 Query访问api/user?userTypeName=randomUserTypeName,您的操作应该像

[HttpGet]
public async Task<ActionResult<IEnumerable<User>>> GetAsync([FromQuery(Name = "userTypeName")]string userTypeName) {
    var result = await ctx.User
        .Include(x => x.UserType)
        .Where(x => x.UserType.Name.ToLower() == UserTypeName.ToLower())
        .ToListAsync();

    if (result == null) return BadRequest();

    return result;
}

推荐阅读