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() ;
});
}
结果:
我的 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() ;
});
}
结果: