У меня есть проект ASP.net Core 9 Web API с включенным [Nullable Retable Types] (
Код: Выделить всё
enableКод: Выделить всё
public sealed record CreateUserRequest(string Password)
{
private readonly string _userName;
public required string UserName
{
get => _userName;
[MemberNotNull(nameof(_userName))]
init => _userName = value.Trim();
}
// … other properties …
}
< /code>
Я ожидаю немедленного сбоя модели (создать HTTP400), если клиент подает: < /p>
[list]
[*]"UserName": null[*]entirely omits the UserName field
[/list]
That is, behave exactly as it does when you try to bind a non‑nullable value type (e.g. sending "Age": "foo" for an int Age).
What I've Попробовал < /strong> < /p>
- на моем контроллере
Код: Выделить всё
[ApiController] - Global Mvc config in program.cs :
Код: Выделить всё
services.AddControllers(opts => { // ensure non-nullable reference types are treated as [Required] opts.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = false; }) .AddJsonOptions(opts => { // JSON 9 flags opts.JsonSerializerOptions.RespectNullableAnnotations = true; opts.JsonSerializerOptions.RespectRequiredConstructorParameters = true; }); - проверял, что:
Отсутствует или null для конструкторов-связанных свойств (например, coder (например, Codeer-byfult
Нет необходимости преобразовать все DTO в записи, связанные с конструктором < /li>
Работает как для отсутствующих, так и для нулевых для некалеваемых справочных свойств < /li>
< /ul>
>
Подробнее здесь: https://stackoverflow.com/questions/797 ... t-core-9-w