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