读取DataTable时出现意外的JSON令牌.从API到API到SybaseASE数据库的调用



我有两个API——第一个,让我们称之为API1调用API2,通过执行存储过程来查询元数据,从数据库中获取存储过程列表(怀疑这是否重要,但将其放在上下文中。

API1是.NET Core 3.1,API2是Framework 4.7.2(也不确定这是否重要(。

API2的控制器是:

[ResponseType(typeof(DataTable))]
public DataTable GetListOfSprocNamesBySchema([FromBody]object sproc)

API1的调用代码为:

var content = new StringContent(JsonConvert.SerializeObject(schema), Encoding.UTF8, "application/json");
HttpResponseMessage response = await ApiClient.ApiService.ApiClient.PostAsync(url, content);
try
{
return await response.Content.ReadAsAsync<T>();
}
catch (Exception e)

如果我使用以下任意一个JSON体直接调用API2,我会获得成功,并收到我的存储过程及其ID的列表。

这些是上面代码的模式对象:

{
"id": 0,
"name": "DBO",
"databaseName": "PIM",
"serverName": "FLUFFY"
}
{
"id": 0,
"name": "ADHOC",
"databaseName": "QIS",
"serverName": "ICKY"
}

然而,当我通过API1(调用API2(调用"ICKY"时,我会获得成功和我期望的数据。当我通过API1(调用API2(调用"FLUFFY"时,我得到以下错误:

System.Exception:读取DataTable时出现意外的JSON令牌。应为StartArray,实际为StartObject。路径",第1行,位置1。XXXXX内部服务器错误XXXXX缓存控制:无缓存Pragma:无缓存服务器:Microsoft IIS/10.0 X-AspNet-版本:4.0.30319X-Powered-Bor:ASP.NET日期:2020年3月2日星期一15:57:08 GMT XXXXXSystem.Net.Http.HttpConnectionResponseContent XXXXX方法:POST,RequestUri:"/api/MetaData/GetListOfSprocNamesBySchema',版本:1.1,内容:System.Net.Http.StringContent,标头:{Accept:application/json请求Id:|47e1e80-468fc91067c479f3.5。
内容类型:application/json;charset=utf-8内容长度:78}

两个调用在两个API中使用完全相同的路径。。。唯一的区别是他们从哪个数据库获得信息("ICKY"命中Sybase IQ,如果有区别的话,我的3个问题孩子都命中Sybase ASE(。当我调用API2时,所有这些调用都直接检索到这样的东西:

[
{
"procedureID": 4419,
"procedureName": "AccountsSameEmail"
},
{
"procedureID": 4173,
"procedureName": "AccountsToGoal"
}
]

根据您命中的架构/DB,有大约1k多个存储过程,但它们的格式都是这样返回的。

根据错误判断,我认为这是控制器在API2返回时构建的JSON上的格式错误,但如果是这样的话,我预计所有返回都是一个问题,而不仅仅是4个排列中的3个。

我需要一种方法来了解两个API之间的通信,记住我们这里的安全性是奥威尔式的,所以有趣的第三方工具完全过时了。。。我有Resharper,这是关于它除了Pro VS2019。

有没有办法看看电话里的尸体是什么?我在任何地方看到的都是Header信息、byte[]和长度。

所以在我的例子中,发生了3件事。

当我们从安全管理的内部部署ProGit获得我的IQ驱动程序时,它没有显示正确的版本号。它的结尾有一个"silent 4",我的一位同事只是通过针对ProGit的powershell脚本发现的。

我的ASE驱动程序,即使在两周前我纠正了它之后,仍然引用了本地共享,而不是nuget。这可能是一个过时的构建/提交的问题,所以从现在开始,我会更加努力地跟踪它。

最后,Dev和ProGit的版本号发生了变化,我没有一个可接受的范围指定(尽管我忘记了如何做到这一点,但我会找到并实现它以防止未来出现问题(。

这不是版本控制第一次咬我的屁股,可能也不会是最后一次,但它发出的错误消息非常令人困惑和误导。

最新更新