【发布时间】:2020-02-12 17:56:36
【问题描述】:
var data = {
"ApplicationName": "Zadmin",
"KanMainGroupList":
[{
"MainGroupName": "Settings",
"KanSubGroupList": [{
"SubGroupName": "Signatures",
"SubGroupURL": "Common/HHALevelSettings.aspx",
"SubGroupQueryString": "HHA_ID=$HHA_ID$&HHAName=$HHA_Name$",
"KanFeatureSetList":
[{
"FeatureName": "Client Sign pop-up",
"Keywords": "Client,sign"
}],
"KanNanoGroupList": [{
"NanoGroupName": "Nano1",
"NanoGroupURL": "URL1",
"NanoGroupQueryString": "",
"KanFeatureSetList": [
{
"FeatureName": "",
"KeyWords": ""
}
]
}]
}
]
}
]
};
我有一个包含上述 JSON 数据的 mongo 文档。现在,当我尝试通过 jquery ajax 发送这些数据时,它会抛出错误“输入格式无效”或一些语法错误。 ajax cal如下:
$.ajax({
url: 'api/HelpAPI',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify(data),
success: function (data) {
console.log(data);
console.log("success");
},
error: function () {
console.log("error");
}
}).done(function () {
})
控制器如下:
[HttpPost]
public void Post([FromBody] string value)
{
//i tried to use FromForm in place or FromBody
//i tried to use object datatype for value and dynamic as well but in object the data
//doesn't come and in dynamic it is very difficult to work upon.
}
最后使用下面的方法我可以在value中正确获取数据。
[HttpPost]
public void Post([FromBody] KanFeatureHelp value)
{
List<KanMainGroup> mainGrp = new List<KanMainGroup>();
List<KanSubGroup> subgrp = new List<KanSubGroup>();
List<KanNanoGroup> nanogrp = new List<KanNanoGroup>();
List<KanFeatureSet> SubGrpfeatureset = new List<KanFeatureSet>();
List<KanFeatureSet> NanoGrpfeatureset = new List<KanFeatureSet>();
//mainGrp = value.KanMainGroupList;
//subgrp = value.KanMainGroupList;
mainGrp = value.KanMainGroupList;
foreach(var i in mainGrp)
{
subgrp = i.KanSubGroupList;
foreach (var j in subgrp)
{
nanogrp = j.KanNanoGroupList;
SubGrpfeatureset = j.KanFeatureSetList;
foreach (var k in nanogrp)
{
NanoGrpfeatureset = k.KanFeatureSetList;
}
}
}
}
KanFeatureHelp 的结构如下:
namespace WebApplication5.Models
{
public class KanFeatureHelp
{
public string ApplicationName { get; set; }
public List<KanMainGroup> KanMainGroupList { get; set; }
}
public class KanMainGroup
{
public string MainGroupName { get; set; }
public List<KanSubGroup> KanSubGroupList { get; set; }
}
public class KanSubGroup
{
public string SubGroupName { get; set; }
public string SubGroupURL { get; set; }
public string SubGroupQueryString { get; set; }
public List<KanFeatureSet> KanFeatureSetList { get; set; }
public List<KanNanoGroup> KanNanoGroupList { get; set; }
}
public class KanNanoGroup
{
public string NanoGroupName { get; set; }
public string NanoGroupURL { get; set; }
public string NanoGroupQueryString { get; set; }
public List<KanFeatureSet> KanFeatureSetList { get; set; }
}
public class KanFeatureSet
{
public string FeatureName { get; set; }
public string Keywords { get; set; }
}
}
问题:
我的 API 调用有什么问题?一个人如何真正知道设置内容类型/数据操作以正确发送数据?如果有人想发送动态数据/对象怎么办?那么如何发送一些字符串数据呢?
是否可以将数据作为字符串发送,然后在 c# 代码中反序列化?
当前目标是在当前 Jsondata 中添加或删除任何 MainGroup / SubGroup / NanoGroup/ FeatureName,我认为这将需要遍历数据。如果我能得到一些关于如何做到这一点的指导,那将是非常有帮助的。
在当前工作场景下,我可以访问数据的唯一级别是 value.KanMainGroupList。此后它不显示任何子组列表或其他数据。执行错误吗?我应该改变什么吗?
非常感谢您的时间和精力。非常感谢。
【问题讨论】:
-
在您的 ajax 调用中请设置
dataType: "json",并重试。还可以尝试将 post 调用放在 try/catch bock 中,以查看是否有任何未处理的异常。如果你发现了,请分享。 -
@Searching jQuery Ajax 调用中的
dataType参数是预期的response 数据类型,只有在服务器发送不正确的Content-Type标头时才需要设置它.它不是指您发送的数据类型 - 这就是contentType的用途。
标签: json ajax asp.net-core-webapi