Не универсальный c метод 'ControllerBase.Ok ()' нельзя использовать с аргументами типа - PullRequest
0 голосов
/ 23 марта 2020

У меня есть asp. net базовое веб-приложение API, в котором класс контроллера увеличен с Controller : ControllerBase, теперь я получаю сообщение об ошибке

Не универсальный c метод 'ControllerBase .Ok () 'нельзя использовать с аргументами типа

для приведенного ниже кода API, что здесь не так?

[HttpPost]
    public async Task<bool> Post()
    {
        return Ok<bool>(await _someTask);
    }

Основываясь на приведенном ниже комментарии, я реализую вот так,

[HttpPost]
    public async Task<ActionResult<bool>> Post()
    {
        return Ok(await SomeTask());
    }

    private async Task SomeTask()
    {
        //some database insert operation
        throw new NotImplementedException();
    }

Тогда я получаю ошибку ниже на return Ok(await SomeTask());,

не могу преобразовать из 'void' в 'object' Controller.cs 49 Active

1 Ответ

0 голосов
/ 23 марта 2020

Метод Ok *1003* имеет две перегрузки: Ok() и Ok(object)

Общей перегрузки c нет, поэтому вы получаете Ваше сообщение об ошибке.

В качестве примечания: хотя для этой упрощенной версии вполне нормально вернуть Task<bool>, более реалистичный сценарий c состоит в том, что метод имеет более один путь к коду или, по крайней мере, более одного ожидаемого вывода (например, он может вернуть 404 или 500 кодов состояния http - для не найденных / внутренних ошибок сервера).

В этих случаях вы хотите вернуть Task<ActionResult<T>>. Таким образом, при использовании таких инструментов, как swagger, для автоматической генерации кода клиента вы получите более подходящий клиент для вашего API.

Обновление
Ваш await неуместен .
Кроме того, если вы хотите вернуть bool, тогда ваш другой метод async должен вернуть Task<bool>.

Попробуйте выполнить следующее:

[HttpPost]
public async Task<ActionResult<bool>> Post()
{
    var result = await SomeTask();
    return Ok(result);
}

private async Task<bool> SomeTask()
{
    //some database insert operation
    throw new NotImplementedException();
}
...