Почему метод notFound не работает в обоих направлениях? - PullRequest
0 голосов
/ 21 сентября 2019

В настоящее время я работаю над групповым проектом, который включает использование веб-API.Я использую C # ASP.NET Core 2.2 API проект с дополнительными классами и всеми остальными бла-бла-бла.

Данные подключены к базе данных Azure и работают.Проблема заключается в запросе 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}")]
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 Ответ

2 голосов
/ 21 сентября 2019

Запрос без результатов не возвращает ноль;возвращает пустой список.

Так что измените свой нулевой чек на счетчик длины или используйте 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...