.net - 检测到不支持的可能对象循环(异步和等待)

标签 .net async-await httpcontext

我有一个用 .Net 4.8 编写的应用程序,它作为最小的 API 运行。 一切都很完美,我搬进了 .Net 6。

更新后,以下代码开始抛出错误并向响应添加其他内容:

app.MapPost("/zxc/asd", ([FromBody] ModelDto modelDto,
        IEndpointHelper endpointHelper, HttpContext httpContext, CancellationToken cancellationToken)
    => httpContext.FromResponseMessage(endpointHelper.Process(modelDto, cancellationToken)));

添加的内容:“不支持‘System.Type’实例的序列化和反序列化”。

我能够通过将代码更改为异步来解决此问题,但这也需要一些解决方法。

app.MapPost("/zxc/asd", async ([FromBody] ModelDto modelDto,
        IEndpointHelper endpointHelper, HttpContext httpContext, CancellationToken cancellationToken)
    => await DoAsync(httpContext, modelDto, cancellationToken, endpointHelper));

async Task DoAsync(HttpContext httpContext, ModelDto modelDto, CancellationToken cancellationToken, IEndpointHelper endpointHelper) => 
    await httpContext.FromResponseMessageAsync(endpointHelper.Process(modelDto, cancellationToken));

奇怪的是,我无法直接从 app.MapPost 运行 httpContext.FromResponseMessageAsync,因为我正在检索以下错误:“检测到不支持的可能的对象循环。这可能是由于循环或对象深度更大......”

知道为什么会这样吗?或者也许如何删除这个附加方法?

最佳答案

致谢https://github.com/Arcade-Dev

带有 => await DoAsync(...) 的包装版本返回Task并将执行包装器中的任何内容,对于 MapPost 下的任务,它将返回 void。

=> await httpContext.FromResponseMessageAsync(...)然而返回 Task<HttpContext> ,这就是为什么它尝试序列化整个 HttpContext作为响应,可能会将其附加到自身作为框架中某处的响应,从而导致循环。 因此,从 lambda 更改为带括号的 lambda 将更改处理程序的返回类型,从而解决问题。

解决方案:

app.MapPost("/zxc/asd", async ([FromBody] ModelDto modelDto, IEndpointHelper endpointHelper, HttpContext httpContext, CancellationToken cancellationToken) 
   => 
   {
       await httpContext.FromResponseMessageAsync(endpointHelper.Process(modelDto, cancellationToken));
   });

关于.net - 检测到不支持的可能对象循环(异步和等待),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77023768/

相关文章:

c# - 等待或 Task.FromResult

javascript - 根据 API 响应显示带有动态内容的 Bootstrap Popover

.net - VB.NET 中的 IIF 函数问题

c# - 接受 int[] 和 List<int> 的方法

async-await - JavaScript : how can I use async/await to "await" something that happens in MutationObserver?

c# - 静态方法中的 HttpContext.Current.Response

asp.net - 如何在 ASP.NET 5/MVC 6 的单元测试中访问 HttpContext

asp.net-mvc - .NET MVC 获取路由模板

.net - Azure网站发布 "The type ' System.Object'在未引用的程序集中定义”

c# - 为什么 DataContractJsonSerializer 会跳过某些属性的反序列化?