我经常遇到这种情况:我的服务返回的任务,在我从控制器中返回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
}
我的问题是,有没有办法设置从Task<T>
到ActionResult<T>
的转换,而无需使操作异步,也许通过隐式运算符?
你忘了在任务之前提到异步
public async Task<Foo> Action(int id)
{
return _fooService.Details(id); // <--- pass-through Task
return BadRequest() // <-- Now it will run
}