#c# #asp.net #asp.net-core #asp.net-core-webapi #asp.net-core-3.1
#c# #asp.net #asp.net-ядро #.net-ядро #asp.net-core-webapi
Вопрос:
У меня есть этот метод http post controller для вставки нового текстового сообщения в БД. Здесь я хочу изменить этот метод на асинхронный метод. Я пытался, но все равно не смог этого сделать. Кто-нибудь может мне помочь? 🙂
Это мой метод контроллера
[HttpPost]
public ActionResult<Message> Create(Message message)
{
var duplicatemessage = _messageService.DuplicateMessage(message.Text);
if (duplicatemessage == null)
{
_messageService.Create(message);
return CreatedAtRoute("Api", new { id = message.Id.ToString() }, message);
}
else
{
return BadRequest(new { message = "Text Already Exist" });
}
}
Это мои методы класса обслуживания, связанные с методом post контроллера
public Message DuplicateMessage(string Text)
{
return _messages.Find<Message>(message => message.Text == Text).FirstOrDefault();
}
public Message Create(Message message)
{
_messages.InsertOne(message);
return message;
}
Комментарии:
1. я не вижу кода БД
2. привет @ Steve Я на самом деле не помещал сюда код БД 🙂
Ответ №1:
попробуйте это:
public async Task<ActionResult<Message>> Create(Message message)
{
var duplicatemessage = await _messageService.DuplicateMessage(message.Text);
if (duplicatemessage == null)
{
_messageService.Create(message);
return CreatedAtRoute("Api", new { id = message.Id.ToString() }, message);
}
else
{
return BadRequest(new { message = "Text Already Exist" });
}
}
public async Task<Message> DuplicateMessage(string Text)
{
return await _messages.Set<Message>().Where(message => message.Text ==
Text).FirstOrDefaultAsync();
}
Комментарии:
1. Привет @Sergey большое спасибо, что это сработало для меня. Мне пришлось немного изменить класс обслуживания, который есть,
public async Task<Message> DuplicateMessage(string Text) { return await _messages.Find<Message>(message => message.Text == Text).FirstOrDefaultAsync(); }
но спасибо за помощь 🙂
Ответ №2:
Если вы хотите внедрить метод async в свой контроллер (я предполагаю, что это то, что вы хотите). Сначала вы должны создать функцию, DuplicateMessage или async. Вы можете сделать это, сделав возвращаемый тип задачей и запустив его в задаче.