繁体   English   中英

controller 可以接受 null 参数值吗?

[英]Can a controller ever accept a null parameter value?

如果我有这样的 controller 方法:

public ActionResult<Item> GetItem(RequestHeaderBase headers, RequestObject request)

我是否可以始终假设标题 object 和请求 object 将被实例化(非空)?

(无论答案如何,我都希望有任何链接可以深入阅读有关其工作原理的任何链接)

这是我的意思的一个例子

我在这里调用请求: https://localhost:44360/weatherforecast 并且您可以看到输入 object 已被实例化,尽管我没有提供查询字符串。 在此处输入图像描述

另一个例子,这次是来自正文的数据: 在此处输入图像描述 在此处输入图像描述

在这两种情况下,您可以通过我的调试看到,无论实例化什么对象,即使我没有在请求中提供任何数据。

现在我在我们的一些应用程序中看到了检查此数据是否为 null 的代码,我相信此代码无关紧要,因此可以删除。

我是否可以始终假设标题 object 和请求 object 将被实例化(非空)?

不,它们可以是 null。

如果它是参考 object (不是值),它将始终被实例化。 每个 object 属性都有一个默认值。 这就是为什么任何用于操作输入参数的 class 都应具有默认或无参数构造函数的原因。 否则会引发异常。 仅当创建 object 时,controller 才会尝试根据 Z80791B3AE7002CB88C8DFA87 请求为 object 属性分配值。 但要小心,只有顶层会被实例化。 如果您在此 object 内部还有其他复杂的属性,它们将被实例化并根据类型具有默认值。 例如,列表将为 null(默认值),而不是空列表。 可空的 integer 属性将是 null,不可空的 0,等等。 但是例如,您可以在构造函数中分配您需要的默认值。

即使您将操作签名更改为此

public ActionResult<Item> GetItem(RequestHeaderBase headers=null, RequestObject request=null)

它们仍然会被实例化,每个属性都会根据类型有一个默认值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM