为什么不采用两种方法来处理notFound工作?

时间:2019-09-20 23:24:55

标签: c# database api

我目前正在从事一个小组项目,该小组项目涉及使用Web API。我正在将C#ASP.NET Core 2.2 API项目与其他类以及所有其他类似的东西一起使用。

数据已连接到Azure数据库并且可以正常工作。问题是请求获取带有附加ID的获取。出于某种原因,除非我在if and else语句中使用该方法,否则该方法将无法工作或被调用。

我在下面添加了一些代码:

[HttpGet("{id}")]
public ActionResult<List<User>> GetUser(int id)
{
    var user = UserContext.User.AsQueryable().
        Where(i => i.id == id).ToList();
    if(user == null)
    {
        return NotFound();
    }
    else
    {
        return user;
    }
}

这是否无关紧要:

[HttpGet("{id}")]
public ActionResult<List<User>> GetUser(int id)
{
    var user = UserContext.User.AsQueryable().
        Where(i => i.id == id).ToList();
    if(user != null)
    {
        return user;
    }
    else
    {
        return NotFound();
    }
}

此:

[HttpGet("{id}")]
public ActionResult<List<User>> GetUser(int id)
{
    var user = UserContext.User.AsQueryable().
        Where(i => i.id == id).ToList();
    if(user == null)
    {
        return user;
    }
    else
    {
        return NotFound();
    }
}

只有这样才能使该方法起作用:

[HttpGet("{id}")]
public ActionResult<List<User>> GetUser(int id)
{
    var user = UserContext.User.AsQueryable().
        Where(i => i.id == id).ToList();
    if(user != null)
    {
        return NotFound();
    }
    else
    {
        return NotFound();
    }
}

为什么这不能正常工作?有什么我想念的吗?

1 个答案:

答案 0 :(得分:2)

没有结果的查询不会返回null;它返回一个空列表。

因此将空检查更改为长度计数,或使用SingleOrDefault。

var users = UserContext
    .User
    .AsQueryable()
    .Where
    (
        i => i.id == id
    )
    .ToList();
if (users.Count != 1)
{
    return NotFound();
}
else
{
    return users.Single();
}

var user = UserContext
    .User
    .AsQueryable()
    .SingleOrDefault
    (
        i => i.id == id
    );
if (user == null)
{
    return NotFound();
}
else
{
    return user;
}