асинхронное ожидание в asp.net основной веб-api (не MVC)

#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. Вы можете сделать это, сделав возвращаемый тип задачей и запустив его в задаче.