Я обновляю. NET Core 2.2 до. NET Core 3.1 API. В 2.2 я мог передать пустое пространство в поле Обязательные строки через вызов API, и ModelState.IsValid оценил бы как true. Однако в 3.1 это поведение изменилось:
https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-3.1#required -атрибут
На сервере обязательное значение считается отсутствующим, если свойство равно нулю. Поле, не допускающее обнуления, всегда допустимо, и сообщение об ошибке атрибута [Обязательный] никогда не отображается.
Однако привязка модели для свойства, не обнуляемого, может завершиться ошибкой, что приведет к появлению сообщения об ошибке, такого как Значение ' ' является недействительным. Чтобы указать настраиваемое сообщение об ошибке для проверки ненулевых типов на стороне сервера, у вас есть следующие опции:
Пробел в строковом поле считается допустимым вводом методом jQuery Требуется проверка. Проверка на стороне сервера считает обязательное строковое поле недействительным, если введен только пробел.
В моем случае я получаю сообщение об ошибке, что обязательное поле email-token
является обязательным, что означает, что оно получило нулевое значение (в отладчике я вижу, что у него пустое пространство). Решение Microsoft состоит в том, чтобы установить для обязательного атрибута значение NULL, но рассматриваемое поле является строкой, поэтому по определению оно может иметь значение NULL, поскольку оно является ссылочным типом - значение NULL можно применять только к типам значений. Это пахнет как ошибка в. NET Core 3.1.
В настоящее время я могу обойти это, передав один символ (.) Со стороны API, но это выглядит как грубый способ сделать это. Можно ли пропустить пробел или есть какой-то другой способ, которым я должен справиться с этим? Или я должен просто передать произвольный символ?
. NET Ядро 2.2 JSON Тело
{
"data": {
"attributes": {
"email-token" : "",
"new-email-address" : "test@test.com"
},
"type": "change-email-addresses"
}
}
. NET Ядро 3.1 JSON Тело
{
"data": {
"attributes": {
"email-token" : ".",
"new-email-address" : "test@test.com"
},
"type": "change-email-addresses"
}
}