【发布时间】:2018-08-22 01:42:59
【问题描述】:
当我尝试在我的 JSON 对象中分配一个属性名称时,我遇到了一些 JSON 数据在我的 Web API 控制器上的 POST 方法的参数中填充 C# 对象的问题。
这是我的 API 控制器:
[HttpPost]
public HttpResponseMessage MyResource(MyComplexClass myClass)
{
var test = myClass.Name;
return Request.CreateResponse(HttpStatusCode.Created);
}
这里是MyComplexClass:
public class MyComplexClass
{
public string Name { get; set; }
public string Id { get; set; }
}
这是我的AJAX 电话:
<script>
function test() {
var innerData = {
Name: 'Bob Loblaw',
Id: "1"
};
var myData = {
myClass: innerData
};
$.ajax({
type: "POST",
url: "api/Test/MyResource",
data: JSON.stringify(myData),
contentType: "application/json",
dataType: "json",
success: function (response) {
// do success stuff
},
error: function (err) {
// do error stuff
}
});
}
</script>
问题是:当我在我的JS代码中将innerData对象作为属性包含在myData对象中时,myClass对象的属性都是null。
我知道如果我将innerData 传递给AJAX 调用本身,myClass 对象会被正确填充,但我很好奇为什么我不能使用命名的 JSON 属性来传递复杂的C# 对象到控制器。
有谁知道如何将myClass 对象作为命名的 JSON 属性传递,或者你能解释一下为什么我不能?
改写的问题:
如果这个 JSON 对象:
var data = {
Name: 'Bob Loblaw',
Id: "1"
};
匹配这个控制器方法:
public HttpResponseMessage MyResource(string Name, string Id)
为什么没有这个 JSON 对象:
var data = {
myClass: { Name: 'Bob Loblaw', Id: "1" }
};
匹配这个控制器方法吗?
public HttpResponseMessage MyResource(MyComplexClass myClass)
其他问题:
是否可以将 API 方法声明如下:
public HttpResponseMessage MyResource(MyComplexClass myClass, string anotherValue)
如果是这样,JSON 对象将如何构造?
【问题讨论】:
-
试试
var myData = innerData;然后发送 -
MyComplexClass期待一个有两个键的对象;姓名和身份证。但你没有给它。所以它没有任何东西可以映射到。MyComplexClass没有myClass字段可以正确地将您的输入映射到它 -
是 Web API 2 吗?
-
不,我正在使用 MVC 版本 5.2.3 和类似版本的 Web API
标签: c# jquery ajax asp.net-mvc api