You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JsonDocument作为控制器Action参数时是否会自动释放?

结论:无需手动调用Dispose,框架会自动处理

你不需要手动调用notification.Dispose(),ASP.NET Core的模型绑定系统会自动管理JsonDocument对象的生命周期,并在请求处理完成后释放它。

具体原因:

  • 当模型绑定创建实现了IDisposable的类型(比如JsonDocument)时,框架会将这些对象加入请求的资源跟踪列表。请求结束后,框架会遍历列表并统一调用Dispose,确保所有托管资源被正确回收。
  • JsonDocument依赖内存池优化性能,框架的自动释放机制能保证内存池资源被正常归还,避免内存泄漏。
  • 手动调用Dispose反而可能引发问题:如果后续有过滤器、中间件需要访问这个JsonDocument,会因对象已释放抛出ObjectDisposedException。

优化建议:

如果你的场景只需要读取几个通用属性,更推荐定义一个仅包含所需属性的强类型模型类,比如:

public class WebHookNotification
{
    public string EventType { get; set; }
    public string TargetId { get; set; }
    // 其他你需要的通用属性
}

然后在Action中直接接收这个模型:

[HttpPost]
[Route("notify")]
public IActionResult ReceiveNotification(WebHookNotification notification)
{
    // 处理逻辑...
    return Ok("All done!");
}

这样既保证类型安全,又完全不用操心资源释放的问题。

如果必须使用JsonDocument,只需去掉手动Dispose调用即可:

[HttpPost]
[Route("notify")]
public IActionResult ReceiveNotification(JsonDocument notification)
{
    // 从JsonDocument中获取一些信息...
    return Ok("All done!");
}

内容的提问来源于stack exchange,提问作者Benjamin U.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:15:28