【问题标题】:async-await in asp.net core web api (not MVC)asp.net core web api中的异步等待(不是MVC)
【发布时间】:2021-05-21 22:39:37
【问题描述】:

我有这个 http post controller 方法来插入一条新的文本消息到 db。这里我想把这个方法改成异步方法。我试过了,但还是做不到。谁能帮我? :)

这是我的控制器方法

[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;
    }

【问题讨论】:

  • 我没有看到数据库代码
  • 嗨@Steve我实际上没有把数据库代码放在这里:)

标签: c# asp.net asp.net-core .net-core asp.net-core-webapi


【解决方案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();
    }

【讨论】:

  • 嗨@Sergey 非常感谢你这对我有用。我不得不在服务类中进行一些更改,即public async Task&lt;Message&gt; DuplicateMessage(string Text) { return await _messages.Find&lt;Message&gt;(message =&gt; message.Text == Text).FirstOrDefaultAsync(); } 但感谢您的帮助:)
【解决方案2】:

如果你想在你的控制器中实现异步方法(我假设这就是你想要的)。您必须首先创建函数 DuplicateMessage 或异步。您可以通过将返回类型设置为任务并在任务中运行它来做到这一点。

【讨论】:

    猜你喜欢
    • 2018-05-14
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    相关资源
    最近更新 更多