C# 为什么赢了';你不觉得这两种方法都管用吗?

C# 为什么赢了';你不觉得这两种方法都管用吗?,c#,database,api,C#,Database,Api,我目前正在一个小组项目中工作,该项目涉及到web API的使用。我使用的是C#ASP.NET Core 2.2 API项目,还有其他类和其他诸如此类的东西 该数据连接到Azure数据库,并且可以正常工作。问题是请求附加id的get。由于某种原因,除非我在if和else语句中使用该方法,否则该方法不起作用或正在被调用 我在下面添加了一些代码: [HttpGet("{id}")] public ActionResult<List<User>> GetUser(int id)

我目前正在一个小组项目中工作,该项目涉及到web API的使用。我使用的是C#ASP.NET Core 2.2 API项目,还有其他类和其他诸如此类的东西

该数据连接到Azure数据库,并且可以正常工作。问题是请求附加id的get。由于某种原因,除非我在if和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}”)]
公共操作结果GetUser(int id)
{
var user=UserContext.user.AsQueryable()。
其中(i=>i.id==id).ToList();
if(user==null)
{
返回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}”)]
公共操作结果GetUser(int id)
{
var user=UserContext.user.AsQueryable()。
其中(i=>i.id==id).ToList();
如果(用户!=null)
{
返回用户;
}
其他的
{
返回NotFound();
}
}
这:

[HttpGet(“{id}”)]
公共操作结果GetUser(int id)
{
var user=UserContext.user.AsQueryable()。
其中(i=>i.id==id).ToList();
if(user==null)
{
返回用户;
}
其他的
{
返回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();
    }
}
[HttpGet(“{id}”)]
公共操作结果GetUser(int id)
{
var user=UserContext.user.AsQueryable()。
其中(i=>i.id==id).ToList();
如果(用户!=null)
{
返回NotFound();
}
其他的
{
返回NotFound();
}
}

为什么这不能正常工作?我缺少什么吗?

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

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

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


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

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

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


我想你已经疯了。如果user等于null,则要返回“NotFound”。如果user不为null,则要返回用户。因为这意味着有东西要返回。是的,我已经编辑了文件,因为我正在尝试并发布它,然后再更改回去,但感谢您的反馈:D@Christopher是写。只有当没有具有指定Id的用户时,您的API才会工作。当没有具有指定Id的用户时,您是否打算返回not found?然后交换if-else语句中的返回值问题是这两种方法都不起作用。无论他是否找到id,都不会调用NotFound方法。@CLEX VS 2019提供了非常有用的“使用显式类型”重构命令-如果您不明白为什么使用
var
的某些代码无法工作,请让VS自动将其更改为显式类型,以查看实际情况。。。也就是说,
列表用户
中的变量名看起来很可笑……我想你的if被翻转了。如果user等于null,则要返回“NotFound”。如果user不为null,则要返回用户。因为这意味着有东西要返回。是的,我已经编辑了文件,因为我正在尝试并发布它,然后再更改回去,但感谢您的反馈:D@Christopher是写。只有当没有具有指定Id的用户时,您的API才会工作。当没有具有指定Id的用户时,您是否打算返回not found?然后交换if-else语句中的返回值问题是这两种方法都不起作用。无论他是否找到id,都不会调用NotFound方法。@CLEX VS 2019提供了非常有用的“使用显式类型”重构命令-如果您不明白为什么使用
var
的某些代码无法工作,请让VS自动将其更改为显式类型,以查看实际情况。。。也就是说,
列表用户
中的变量名看起来很可笑……有趣的是,他们实际上明确地决定拥有列表,并且知道它不是空的(否则
.ToList()
will NRE)……有趣的是,他们实际上明确地决定拥有列表,并且知道它不是空的(否则
.ToList()
will NRE)…