C# 8.0 可空(Nullable)給ASP.NET Core帶來的坑
空引用異常,怕是所有.Net 開發(fā)者都遇到的神奇錯(cuò)誤,它被發(fā)明者稱為“十億美元錯(cuò)誤”。為了解決它,引入了C# 8.0可空類型,但是這卻給asp.net core帶來了一個(gè)坑·····
Nullable reference types(可為空引用類型)
可為空引用類型不講武德
C#8.0 引入了“可為空引用類型”和“不可為空引用類型”,使我們能夠?qū)σ妙愋妥兞康膶傩宰鞒鲋匾暶?。
我們只需要修改C#8的項(xiàng)目的文件,添加,示例如下
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
在沒增加這個(gè)類型前,代碼長(zhǎng)這樣:
添加后
代碼就會(huì)出現(xiàn)警告,并且生成時(shí)也會(huì)報(bào)告提示:
當(dāng)我們賦值null給變量,也會(huì)提示
如果我們確定引用類型確定不為null,可以添加 感嘆號(hào) !
如果想讓它可空,我們只需要修改為string?即可
其他功能參考官網(wǎng)
本文意不在此
在Asp.net core 使用的坑
大意了,沒有閃
這么牛批的東西,于是我開開心心在asp.net core 5用上了
然后我就遇到了這個(gè)錯(cuò)誤
這是一個(gè)查詢列表方法,查詢條件可以是空字符串,我也沒有設(shè)置[Required],這咋就報(bào)400錯(cuò)誤了捏!
經(jīng)過仔細(xì)排查,發(fā)現(xiàn)是可為空引用類型的鍋,當(dāng)開啟了可為空引用類型,
這個(gè)string 屬性就編譯成了[Required],所以成功被捕捉···
解決方法1
老樣子,將屬性修改為string?即可。
解決方法2
如果是大范圍修改, 在ConfigureServices方法添加一下代碼,關(guān)閉不可為空引用類型的屬性即可
services.AddControllers(options => options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true);
后記
本人不是大佬,只是道路先行者,在落河后,向后來的人大喊一聲,這里有坑,不要過來??!
縱然如此,依舊有人重復(fù)著落河,重復(fù)著吶喊······
個(gè)人博客網(wǎng)站?Blog
技術(shù)交流Q群:1012481075 群內(nèi)有各種流行書籍資料
文章后續(xù)會(huì)在公眾號(hào)更新,微信搜索 OneByOneDotNet 即可關(guān)注。
你的一分鼓勵(lì),我的十分動(dòng)力,點(diǎn)贊免費(fèi),感恩回饋。喜歡就點(diǎn)贊評(píng)論吧,雙擊66~
