#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()
, то вы блокируете поток во время работы с БД, что не является хорошей практикой.