我目前正在从事一个小组项目,该小组项目涉及使用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();
}
}
为什么这不能正常工作?有什么我想念的吗?
答案 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;
}