asp.net 如果将JsonDocument作为参数传递给控制器操作,是否会自动释放它?

wfveoks0  于 2023-02-10  发布在  .NET
关注(0)|答案(1)|浏览(113)

我正在设置一个API来接收来自一个web钩子的通知,这个钩子没有为对象提供统一的形状。我知道一些常见的属性可以帮助我正确地路由通知,但仅此而已。我目前的解决方案是接受JsonDocument作为我的action方法中的参数;但是,我想确保我正确地处理了这些。我的代码现在看起来像这样:

[HttpPost]
[Route("notify")]
public IActionResult ReceiveNotification(JsonDocument notification)
{
    // Grab some information from the JsonDocument...
    notification.Dispose(); // Is it necessary to call this?
    return Ok("All done!");
}

notification会被自动处理还是需要我自己处理?
Docs如何使用JSON文档...不要把它作为动作的输入,但要在某处强调Dispose的重要性。我猜问这个问题的另一种方式是,模型绑定是否“转移生命周期所有权并处置责任”到我的动作代码?

rsaldnfx

rsaldnfx1#

  • 〈〈如果将JsonDocument作为参数传递给控制器操作,是否会自动释放该JsonDocument *

简单地说,答案是否定的。一旦它超出范围,GC就会收集它(如果没有任何东西保留它)。
最佳实践是在所有可处置示例超出范围之前处置它们。
您可以在using语句中使用notification,以确保在它超出范围之前将其释放。

[HttpPost]
[Route("notify")]
public IActionResult ReceiveNotification(JsonDocument notification)
{
    using (notification)
    {
        // Grab some information from the JsonDocument...
        return Ok("All done!");
    }
}

相关问题