为什么 id 在某些默认 MVC 操作上可以为空?
Why is id nullable on some default MVC actions?
在 ASP.NET MVC 应用程序中,当我们在 Visual Studio 中构建控制器时,我们会得到默认操作:
- 索引
- 创建
- 删除
- 编辑
- 详情
在上面,有几个参数有一个可以为空的 ID (int? id
):Details、Edit(GET 版本)、Delete、DeleteConfirmed。然后至少在某些情况下,有以下代码可以确保 ID 不为空:
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
所有这些操作都需要一个 ID;这不是可选的。您不能显示任何内容的详细信息或删除任何内容等。此外,如果它们为空,我们将生成 BadRequest
状态代码。
那么为什么这些参数不是不可为空的整数呢?
我认为这是因为 int
的默认值是 0
。如果按照您的建议将其设置为 int id
,则模型绑定器将为您提供默认值 0
,这意味着您无法区分 0
是否实际提供或是否它只是被默认了。
编辑:一直在考虑这个问题。它是可选的,因为它是在更高级别为通用路由模板定义的 - 有些操作需要它,有些则不需要。
对于像这样的简单参数默认为 0 我错了 - 请参阅评论。
在 ASP.NET MVC 应用程序中,当我们在 Visual Studio 中构建控制器时,我们会得到默认操作:
- 索引
- 创建
- 删除
- 编辑
- 详情
在上面,有几个参数有一个可以为空的 ID (int? id
):Details、Edit(GET 版本)、Delete、DeleteConfirmed。然后至少在某些情况下,有以下代码可以确保 ID 不为空:
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
所有这些操作都需要一个 ID;这不是可选的。您不能显示任何内容的详细信息或删除任何内容等。此外,如果它们为空,我们将生成 BadRequest
状态代码。
那么为什么这些参数不是不可为空的整数呢?
我认为这是因为 int
的默认值是 0
。如果按照您的建议将其设置为 int id
,则模型绑定器将为您提供默认值 0
,这意味着您无法区分 0
是否实际提供或是否它只是被默认了。
编辑:一直在考虑这个问题。它是可选的,因为它是在更高级别为通用路由模板定义的 - 有些操作需要它,有些则不需要。
对于像这样的简单参数默认为 0 我错了 - 请参阅评论。