Asp.net core IActionResult无法从用法推断方法的类型参数

Asp.net core IActionResult无法从用法推断方法的类型参数,asp.net-core,generics,actionresult,Asp.net Core,Generics,Actionresult,我有一个用于ASP.NET核心web api的操作包装器方法 public异步任务ThrowIfNullActionWrapper(Func-Func) 其中t响应:IActionResult { 尝试 { //业务逻辑 return wait func(); } 捕获(ValueNullCheckFailureException) { return(treresponse)(Object)newnotfoundresult(); } 捕获(例外) { 投掷; } } 当我有如下不同的返回类型

我有一个用于ASP.NET核心web api的操作包装器方法

public异步任务ThrowIfNullActionWrapper(Func-Func)
其中t响应:IActionResult
{
尝试
{
//业务逻辑
return wait func();
}
捕获(ValueNullCheckFailureException)
{
return(treresponse)(Object)newnotfoundresult();
}
捕获(例外)
{
投掷;
}
}
当我有如下不同的返回类型时,我得到了
方法的类型参数不能从用法中推断出来

[HttpGet(“{id}”)]
公共异步任务获取(Guid id)
{
返回wait wait ThrowIfNullActionWrapper(异步()=>{
//一些代码。。。
如果(xxxxx)
{
返回NotFound();
}
//一些代码。。。
返回Ok(dto);
});
}
如果我删除行
return NotFound(),错误将消失

似乎是
OK()
NotFound()
方法的不同返回类型导致了这个问题。但它们都继承自
IActionResult


我是否可以同时使用
OK()
NotFound()
方法,而不使用无法从用法中推断出的方法的
类型参数?

根据您的描述,我建议您可以在NotFound()方法之后添加as StatusCodeResult,以避免ThrowIfNullActionWrapper的不同返回类型

更多详细信息,请参考以下代码:

    [HttpGet("{id}")]
    public async Task<ActionResult<RouteModel>> Get(Guid id)
    {
        return await ThrowIfNullActionWrapper(async () => {
            // some codes...
            if (1 == 0 )
            {
                return NotFound() as StatusCodeResult;
            }
            // some codes...
            return  Ok()  ;
        });
    }
[HttpGet(“{id}”)]

公共异步任务

只需将
作为IActionResult
添加到两个
返回中
statements@haim770操作方法的返回类型是
ActionResult
,这导致了在我的代码中从
IActionResult
ActionResult
的隐式强制转换错误,最终返回类型是
Ok(dto)
,这是一个
OkObjectResult
,与
StatusCodeResult
冲突。如果我将
用作ActionResult
,它将起作用。
ActionResult
OkObjectResult
BadRequestResult
的公共父抽象类。但是为什么抽象类
ActionResult
有效,而inferface
IActionResult
无效呢?