. NET Core 3.1 Обязательный строковый атрибут, для которого задано пустое пространство, приводит к ModelState.IsValid False - PullRequest
0 голосов
/ 15 апреля 2020

Я обновляю. 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"
    }
}
...