IActionResult 方法的类型参数无法从用法中推断出来

IActionResult The type arguments for method cannot be inferred from the usage

我的 ASP.NET CORE web api

有一个动作包装器方法
        public async Task<TResponse> ThrowIfNullActionWrapper<TResponse>(Func<Task<TResponse>> func)
            where TResponse : IActionResult
        {
            try
            {
                // business logic
                return await func();
            }
            catch (ValueNullCheckFailureException)
            {
                return (TResponse)(Object)new NotFoundResult();
            }
            catch (Exception)
            {
                throw;
            }
        }

当我有如下不同的 return 类型时,我得到 The type arguments for method cannot be inferred from the usage 错误。

        [HttpGet("{id}")]
        public async Task<ActionResult<MyDto>> Get(Guid id)
        {
            return await ThrowIfNullActionWrapper(async () => { 
                // some codes...
                if (xxxxx)
                {
                    return NotFound();
                }
                // some codes...
                return Ok(dto);
            });
        }

如果我删除行 return NotFound();,错误就会消失。

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

我可以同时使用 OK()NotFound() 方法而不会出现 type arguments for method cannot be inferred from the usage 问题吗?

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

更多详情,您可以参考以下代码:

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

结果: