.NET7 ASP.NET API请求成功后抛出System.NotSupportedException异常
问题分析与修复
问题根源
你遇到的System.NotSupportedException是因为基控制器的Handle方法错误地将Task<ServiceResult<T>>对象传递给了Ok()方法,而Task内部包含System.Action类型的成员(如MoveNextAction),JSON序列化器不支持序列化这类委托类型。
修复代码
修改基控制器中的Handle方法,将返回的serviceResult替换为已经await完成的result:
protected async virtual Task<ActionResult<ServiceResult<T>>> Handle<T>(Task<ServiceResult<T>> serviceResult) { var result = await serviceResult; if (result.Succeeded) { // 替换为已完成的业务结果对象,而非Task载体 return Ok(result); } return Problem(detail: $"{result.Error.Message}. Internal error code: {result.Error.Code}.", statusCode: 400); }
错误原因说明
你已经通过var result = await serviceResult;获取了异步操作完成后的实际业务结果,但后续返回时错误传入了未被消费的Task对象。Task作为异步操作的封装载体,内部包含异步执行相关的委托逻辑,这些内容无法被JSON序列化,因此Swagger在尝试序列化响应内容时抛出异常。
内容的提问来源于stack exchange,提问作者user98
相关产品推荐
相关产品推荐

