TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #2582 2.53K
День 2135. #ЗаметкиНаПолях
Избегаем Null в Строках при Отправке Форм
ASP.NET Core
Если перенести решение с ASP.NET Framework на ASP.NET Core 8, можно внезапно столкнуться с ошибкой 500. Ошибка происходит из-за исключения NullReferenceException. Рассмотрим метод действия:
[HttpPost("/")]
public ActionResult Index(
[FromForm] MyForm myForm)
{
if(myForm.Input1.Length > 0)
{
// Что-то делаем…
}
return Ok();
}
public class MyForm
{
public string Input1 { get; init; }
}

Вроде ничего странного, правда? Только обработку ошибок убрали для краткости. А вот код, который отправлял форму:
const formData = new URLSearchParams();
formData.append('Input1', '');
fetch('/', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: formData.toString()
})
.then(response => response.json())
.then(data => {
console.log('Success:', data);
})
.catch((error) => {
console.error('Error:', error);
});

Здесь важно то, что Input1 установлен в пустую строку ''. Но при отправке пустой строки ASP.NET Core не устанавливает соответствующее свойство в пустую строку. Вместо этого он устанавливает его в значение null.

Это можно исправить несколькими способами.

Для конкретной конечной точки
Использовать атрибут DisplayFormat:
public class MyForm
{
[DisplayFormat(ConvertEmptyStringToNull = false)]
public string Input1 { get; init; }
}


Глобально
Написать реализацию IDisplayMetadataProvider, которая устанавливает ConvertEmptyStringToNull в false для всех строковых свойств:
public class EmptyStringDisplayMetadataProvider :
IDisplayMetadataProvider
{
public void CreateDisplayMetadata(
DisplayMetadataProviderContext context)
{
if (context.Key.ModelType == typeof(string))
context.DisplayMetadata
.ConvertEmptyStringToNull = false;
}
}

Использование:
// …
builder.Services.Configure<MvcOptions>(opts =>
{
opts.ModelMetadataDetailsProviders
.Add(new EmptyStringDisplayMetadataProvider());
});
// …


Источник: https://josef.codes/dont-let-asp-net-core-set-empty-strings-to-null-when-posting-forms/
  • 👍 21
More from @netdeveloperdiary
  1. Oct 6, 2026🦈 Открытое собеседование на Middle C# | 6 октября, 19:00 МСК Приглашаем на открытое собес…
  2. Oct 6, 2026День 2806. #ЗаметкиНаПолях Типы Коллекций в .NET, Которые Стоит Попробовать. Начало Больши…
  3. Oct 5, 2026День 2805. #ЧтоНовенького #NET11 Аргументы в Выражениях Коллекций в C#15 В C#15 реализован…
  4. Oct 4, 2026День 2804. #ВопросыНаСобеседовании Марк Прайс предложил свой набор из 60 вопросов (как тех…
  5. Oct 3, 2026Post #3360
  6. Oct 3, 2026День 2803. #Оффтоп Чем Заняться, Пока Работают Агенты? У VS Code Есть Ответ Сейчас большую…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →