C# 8.0 可空(Nullable)给ASP.NET Core带来的坑

空引用异常,怕是所有.Net 开发者都遇到的神奇错误,它被发明者称为“十亿美元错误”。为了解决它,引入了C# 8.0可空类型,但是这却给asp.net core带来了一个坑·····

c-8-0-可空nullable给asp-net-core带来的坑

Nullable reference types(可为空引用类型)

可为空引用类型不讲武德

C#8.0 引入了“可为空引用类型”和“不可为空引用类型”,使我们能够对引用类型变量的属性作出重要声明 。

我们只需要修改C#8的项目的文件,添加<Nullable>enable</Nullable>,示例如下

  <PropertyGroup>
      <TargetFramework>net5.0</TargetFramework>
      <Nullable>enable</Nullable>
  </PropertyGroup>

在没增加这个类型前,代码长这样:
在这里插入图片描述
添加后
在这里插入图片描述

代码就会出现警告,并且生成时也会报告提示:
在这里插入图片描述
当我们赋值null给变量,也会提示
在这里插入图片描述
如果我们确定引用类型确定不为null,可以添加 感叹号 !
在这里插入图片描述

如果想让它可空,我们只需要修改为string?即可
在这里插入图片描述
其他功能参考官网
本文意不在此

在Asp.net core 使用的坑

大意了,没有闪

这么牛批的东西,于是我开开心心在asp.net core 5用上了

然后我就遇到了这个错误

字段是必须的
字段是必须的

这是一个查询列表方法,查询条件可以是空字符串,我也没有设置[Required],这咋就报400错误了捏!

经过仔细排查,发现是可为空引用类型的锅,当开启了可为空引用类型,

这个string 属性就编译成了[Required],所以成功被捕捉···

解决方法1
老样子,将属性修改为string?即可。

解决方法2
如果是大范围修改, 在ConfigureServices方法添加一下代码,关闭不可为空引用类型的属性即可

 services.AddControllers(options => options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true);

后记

本人不是大佬,只是道路先行者,在落河后,向后来的人大喊一声,这里有坑,不要过来啊!

纵然如此,依旧有人重复着落河,重复着呐喊······

个人博客网站 Blog

技术交流Q群: 1012481075 群内有各种流行书籍资料

文章后续会在公众号更新,微信搜索 OneByOneDotNet 即可关注。

你的一分鼓励,我的十分动力,点赞免费,感恩回馈。喜欢就点赞评论吧,双击66~

技术交流Q群: 1012481075 群内有各种流行书籍资料
文章后续会在公众号更新,微信搜索 OneByOneDotNet 即可关注。
你的一分鼓励,我的十分动力,点赞免费,感恩回馈。喜欢就点赞评论吧,双击6666~
本网站(网站地址)刊载的所有内容,包括文字、图片、音频、视频、软件、程序、以及网页版式设计等均在网上搜集。
访问者可将本网站提供的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。
除此以外,将本网站任何内容或服务用于其他用途时,须征得本网站及相关权利人的书面许可,并支付报酬.
本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站,予以删除.
转载请注明出处
作者昵称:OneByOneDotNet
作者链接:https://onebyone.icu/user/1
网站标题:OneByOne DotNet
网站地址:https://onebyone.icu
文章标题:C# 8.0 可空(Nullable)给ASP.NET Core带来的坑
文章链接:https://onebyone.icu/archives/1389
原文出处:https://onebyone.icu/?p=1389
原文链接:https://onebyone.icu/?p=1389
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发表评论

邮箱地址不会被公开。 必填项已用*标注

WeChat
WeChat
QQ
QQ
返回顶部