Как передать данные из веб-API .net core 5.0 в угловой интерфейс как json?

Мой старый проект веб-api .net core 2 использовал newtonsoft для сериализации данных в json, которые я затем передал обратно на интерфейсный (угловой) сайт как json, то есть используя что-то вроде:

  1. Создайте функцию, то есть public IActionResult Countries_Get(), запросите базу данных сервера sql и заполните новую таблицу данных sql, то есть DataTable dtCountries = clsDB.Execute_To_DataTable("selCountries", lstDBParams, Request);.
  2. Вернуть данные из функции с кодом HTTPStatusCode, например Ok, т.е. return Ok(dtCountries);

Приведенный выше код больше не работает в проекте .net 5.0 (запущенном заново) с ошибкой System.NotSupportedException: Serialization and deserialization of 'System.Type' instances are not supported and should be avoided since they can lead to security issues. Path: $.Columns.DataType..

Я читал, что это разработано Microsoft, поскольку использование нового пространства имен System.Text.Json небезопасно, я действительно хочу сделать это правильно, но после нескольких часов поиска я не приблизился к ответу.

Может кто-нибудь посоветовать, как сделать то же самое, что и исходное приложение.

Ваше здоровье


person SteveR    schedule 17.12.2020    source источник
comment
Если можете, я настоятельно рекомендую отказаться от использования DataTable, сейчас это очень старая технология, и есть много лучших вариантов. Но если вы застряли, вы можете заставить его работать, заставив свой проект использовать Newtonsoft вместо нового пространства имен System.Text.Json (как написано в этот ответ)   -  person DavidG    schedule 17.12.2020
comment
Спасибо @DavidG за ввод, я все еще новичок в веб-разработке и, вероятно, с самого начала не делал что-то правильно с веб-api. Если бы я отошел от таблиц данных, какой маршрут вы бы предложили? ... как уже упоминалось, этот проект является своего рода предкурсором для гораздо более крупного проекта, поэтому я хочу сделать это правильно, а не быстро.   -  person SteveR    schedule 17.12.2020
comment
DataTable - это просто устаревшая технология, которая сейчас редко используется. Чаще всего используются простые классы C # для хранения объектов. Существует бесчисленное множество руководств о том, как запрашивать базу данных и возвращать JSON, обычно с использованием ORM, такого как Entity Framework.   -  person DavidG    schedule 17.12.2020
comment
Хорошо, я посмотрю, как это сделать, и посмотрю, решит ли это проблему и даст ли мне путь вперед. Ваше здоровье   -  person SteveR    schedule 17.12.2020


Ответы (1)


Похоже, вы хотите вернуть DataTable напрямую в результате. Действительно, это может привести к проблемам с безопасностью.

Вы пробовали сделать промежуточное отображение?

Поместите свои свойства DataTable в новый класс, а затем верните этот новый класс в качестве результата.

person AtomikD3sign    schedule 17.12.2020
comment
Спасибо @ AtomikD3sign Мой исходный проект был моей первой попыткой создать сайт Angular, который я узнал по ходу работы, поэтому я склонен был следовать тому же методу получения и передачи данных между api и интерфейсом, то есть выполнить запрос, чтобы получить data, заполните datatable результатами, а затем передайте их непосредственно обратно в угловой интерфейс, как таковой, возможно, не лучший способ. Что касается промежуточного сопоставления ... я бы не знал, с чего начать, и использование моего вышеупомянутого метода, возможно, приведет к МНОГО изменения кода, чтобы сделать это по-другому. т.е. создание нового класса для каждого типа объекта, который я хочу вернуть. - person SteveR; 17.12.2020