【发布时间】:2018-01-09 01:57:11
【问题描述】:
我正在开发一个网站以及一个 API 来为其提供数据,并注意到我当前的流程涉及在进行 API 调用时对相同数据进行重复序列化和反序列化。我想知道是否有更好的方法来处理事情。网站和 API 都是使用 ASP.Net Core 2.0 用 C# 编写的。
我目前的流程如下:
1) 最终用户加载网站页面
2) AJAX 调用来自客户端 JavaScript,调用网站中的 C# 函数。
3) C# 网站函数调用 API(使用 Swagger 生成的客户端)。
4) API 将数据序列化并以 JSON 格式返回给网站。
5) 网站中的 Swagger 客户端将数据反序列化回 POCO 类。
6) 网站 C# 函数将数据序列化回 JSON 以将其返回给 AJAX 函数。
7) 在客户端中对 JSON 数据进行了处理 - 在第一次解析 JSON 之后不可避免。
示例代码:
AJAX 调用:
var xhr = new XMLHttpRequest();
xhr.open('get', "/GetData", true);
xhr.onload = function () {
var data = JSON.parse(xhr.responseText);
doSomething(data);
}.bind(this);
xhr.send();
网站方式:
[Route("/GetData")]
public async Task<IActionResult> GetData()
{
var data = await ApiClient.ApiDataGetAsync();
return Json(data);
}
API方法:
[HttpGet]
public Dictionary<int, string> GetData()
{
return _logic.GetData();
}
如上所示,数据由 API 序列化为 JSON,然后由 Swagger 客户端反序列化为 POCO,然后在网站中序列化回 JSON 以在客户端进行处理。
我意识到我可以通过直接从 AJAX 调用 API 而不是通过网站来简化此操作,但出于多种原因我宁愿避免这种情况:
1) 它将 API 与网站的前端紧密耦合,目前我可以选择在网站中实现一个接口层以简化将来需要更换 API 的事情。
2) 这会减少我对谁可以访问 API 的控制 - 目前它被 IP 地址锁定。
有什么方法可以改进这个过程,这样就不必在保留 Swagger 客户端的同时对数据进行两次序列化?
【问题讨论】:
-
你会如何缩短这个?
-
我不知道,我只是想看看有没有可能。
标签: c# ajax serialization asp.net-core