問題:
還是升級到3.1的問題,直接上圖,現象如下:
我們的系統里,有一些查詢條件是從列舉轉化過來的,但是為了統一,界面渲染的時候追加了一個“請選擇”,value為-999,這種場景很多很多,


可以看到-999不在列舉的定義里,只要我以當前選擇狀態提交請求,后端全域的modal valid就會報錯,說-999不是有效的值,
這個情況在我之前2.1里面不存在的,升級到3.1就這樣了,
調查:
我同事也在看,居然在github里有人提過這樣的issue:https://github.com/dotnet/aspnetcore/issues/14824

官方說了,在3.1里面,不管這個引數了,
完了我們去看看3.1版本下,這個列舉系結器的原始碼吧:https://github.com/dotnet/aspnetcore/blob/v3.1.2/src/Mvc/Mvc.Core/src/ModelBinding/Binders/EnumTypeModelBinder.cs


仔細看他里面說的很清楚,不在列舉的定義范圍內,系結的值,全都無效的,方法會回傳fasle,然后checkmodel就會爆error,此邏輯的初衷的確是好的,因為系結更嚴謹了,新專案可以嘗試遵守下,
解決:
1. 要么我改前端,但是想想還是算了,好多地方都用,
2. 自己重寫一個,因為IsDefinedInEnum方法被它定義成私有的了,本想著可以擴展,想想還是重新寫了,代碼如下:
模型系結三板斧-xxxModelBinder:

模型系結三板斧-xxxModelBinderProvider:

模型系結三板斧-替換:


至此,就適配了這個問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/49215.html
標籤:.NET Core
上一篇:1.NET Core 概述
