首页 > 解决方案 > 在不解包任务的情况下返回 ActionResult

问题描述

我经常遇到这种情况,我的服务返回任务,我必须在ActionResult从控制器返回之前解包。

public Task<ActionResult<Foo>> Action(int id)
{
    // Task<Foo> cannot be casted to Task<ActionResult<Foo>>
    return _fooService.Details(id); 
}

服务返回的任务不能隐式转换为ActionResult<Foo>,所以我最终在控制器中解压任务。像这样,

public async Task<ActionResult<Foo>> Action(int id)
{
    return await _fooService.Details(id);
    // Both work
    return BadRequest();
}

如果我不将它包装在 ActionResult 中,我可以通过任务,但我不能返回其他类型的IActionResults.

public Task<Foo> Action(int id)
{
    return _fooService.Details(id); // <--- pass-through Task

    return BadRequest() // <-- But, I can't do this
}

我的问题是,有没有办法在不使动作异步的情况下设置从 aTask<T>到a 的转换,也许是通过隐式运算符?ActionResult<T>

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

解决方案


你忘了在 Task 之前提到async

public async Task<Foo> Action(int id)
{
    return _fooService.Details(id); // <--- pass-through Task
    
    return BadRequest() // <-- Now it will run
}

推荐阅读