Как глобально отвергнуть NULL для не нулевых типов ссылок в веб-API ASP.NET Core 9 с System.text.json?C#

Место общения программистов C#
Ответить
Anonymous
 Как глобально отвергнуть NULL для не нулевых типов ссылок в веб-API ASP.NET Core 9 с System.text.json?

Сообщение Anonymous »

фон
У меня есть проект ASP.net Core 9 Web API с включенным [Nullable Retable Types] (). В моем запросе dtos я объявляю определенные свойства как невидимые, например: < /p>

Код: Выделить всё

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
, or
[*]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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»