如何将数据表从 .net core 5.0 web api 作为 json 传递到 Angular 前端?

Posted

技术标签:

【中文标题】如何将数据表从 .net core 5.0 web api 作为 json 传递到 Angular 前端?【英文标题】:how do i pass a datatable from a .net core 5.0 web api to an angular front end as json? 【发布时间】:2021-03-28 07:07:13 【问题描述】:

我的旧 .net core 2 web api 项目使用 newtonsoft 将数据表序列化为 json,然后我将其作为 json 传递回前端(角度)站点,即使用以下内容:

    创建一个函数,即public IActionResult Countries_Get(),查询一个sql server数据库并填充一个新的sql数据表,即DataTable dtCountries = clsDB.Execute_To_DataTable("selCountries", lstDBParams, Request);。 从函数返回数据表,带有 HTTPStatusCode,例如 Ok ie 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 命名空间不安全,我真的想以正确的方式继续前进,但经过数小时的搜索后,我离答案更近了.

有人可以建议如何做上述与原始应用程序相同的事情。

干杯

【问题讨论】:

如果可以的话,我强烈建议不要使用DataTable,它们现在已经是非常古老的技术了,还有很多更好的选择。但是如果你被卡住了,你可以通过让你的项目使用 Newtonsoft 而不是新的 System.Text.Json 命名空间(如this answer 中所写)来使其工作 感谢@DavidG 的输入,我在网络开发方面还是个新手,因此可能从一开始就没有以正确的方式使用网络 API。如果我要离开数据表,你会建议哪条路线?...如前所述,这个项目是一个更大的项目的前兆,因此我想以正确的方式而不是快速的方式来做。 DataTable 只是一种现在很少使用的遗留技术。使用普通 C# 类来保存对象更为常见。关于如何查询数据库并返回 JSON 的教程数不胜数,通常使用类似实体框架的 ORM。 好的,我会考虑试一试,看看是否能解决问题并为我指明前进的方向。干杯 【参考方案1】:

您似乎想直接返回一个 DataTable 作为结果。事实上,这可能会导致安全问题。

您是否尝试过进行中间映射?

将您的 DataTable 属性放入一个新类中,然后将这个新类作为结果返回。

【讨论】:

谢谢@AtomikD3sign 我最初的项目是我在一个Angular站点上的第一次尝试,这是我在学习过程中学到的,因此我倾向于遵循在api和前端之间检索和传递数据的相同方法,即运行查询以获取数据,用结果填充数据表,然后将其直接传递回角度前端,因此可能不是最好的方法。至于中间映射......我不知道从哪里开始,使用我上面的方法可能会导致很多代码更改以不同的方式进行。即为我要返回的每种类型的对象创建一个新类。

以上是关于如何将数据表从 .net core 5.0 web api 作为 json 传递到 Angular 前端?的主要内容,如果未能解决你的问题,请参考以下文章

为 ASP.NET Core 5.0 - EF Core 5.0 Web App 配置 PostgreSQL 连接字符串以在 MS 或 Linux 云上运行?

EF Core 5.0 - 更新 ASP.NET Core Web API 中的多对多实体

从 3.1 升级后的 .NET Core 5.0 Azure 部署 CORS 问题

如何将 Azure Functions v3 迁移到 .net core 5.0

在 ASP.NET Core 5.0 Web API 中实现 DelegatingHandler?

发布时服务器证书错误,.Net core 5.0,IIS 服务器