Asp.net core IActionResult无法从用法推断方法的类型参数
我有一个用于ASP.NET核心web api的操作包装器方法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(); } 捕获(例外) { 投掷; } } 当我有如下不同的返回类型
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
有效,而inferfaceIActionResult
无效呢?