Как проверить, существует ли запись в базе данных с помощью WebAPI?

#c# #asp.net-mvc #asp.net-web-api

#c# #asp.net-mvc #asp.net-web-api

Вопрос:

Я искал подходящее направление для проверки, существует ли запись входа в базу данных. Мои намерения заключаются в том, чтобы при вводе учетных данных пользователя со страницы входа использовать имя пользователя и пароль и проверить, существует ли он с помощью async.

 public async Task<ActionResult<ResultsDTO<LoginDTO>>> PostLogin(LoginFormDTO login)
{
    ResultsDTO<LoginFormDTO> output = new ResultDTO<LoginForFoDTO>();

    if (!ModelState.IsValid)
    {
        output.Success = false;
        output.SetValidations(ModelState);

    }
    LoginFormDTO loginFormDTO = null;
    try
    {
        string encryptedPassword = encryptmystuff(login.pw);
        // validate login
        log logUser = _context.log.SingleOrDefault(m => m.name == login.Username amp;amp; m.password == encryptedPassword);
    }
    catch
    {

    }
}
  

Комментарии:

1. и с какой проблемой вы столкнулись с этим кодом до сих пор?

2. PS. если вы просто переходите к await вызову SingleOrDefaultAsync() , тогда вы можете просто использовать SingleOrDefault() — ожидая его, вы фактически снова сделали его синхронным

3. @ADyson Он не будет запускаться, но сейчас я пробую ваше решение.

4. «не будет выполняться» — это не сообщение об ошибке или заявление о проблеме. Пожалуйста, предоставьте нам подробную информацию об ошибках. И мое предложение не решит вашу проблему, я просто указал, что использование async здесь было пустой тратой времени, если вы на самом деле не собираетесь делать что-то еще во время выполнения асинхронного кода.

5. @ADyson ошибка «идентификатор» отсутствует.

Ответ №1:

Вам просто нужно изменить эту строку

 log logUser = _context.log.SingleOrDefault(m => 
                      m.name == login.Username amp;amp; m.password == encryptedPassword);
  

Для

 log logUser = await _context.log.SingleOrDefaultAsync(m => 
                      m.name == login.Username amp;amp; m.password == encryptedPassword);

// return failure if logUser is null
  

Это использование async/await , которое будет синхронно выполнять ваш код, но не будет блокировать поток во время выполнения вашего запроса к БД.

С другой стороны, если вы используете SingleOrDefault() , то вы блокируете поток во время работы с БД, что не является хорошей практикой.