当我尝试在JSON对象中分配属性名称时,我无法在Web API控制器上的POST方法的参数中填充一些C#对象的JSON数据。
这是我的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
all 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对象的结构如何?
为什么不使用此JSON对象:
var data = {
myClass: { Name: 'Bob Loblaw', Id: "1" }
};
与此控制器方法匹配?
public HttpResponseMessage MyResource(MyComplexClass myClass)
由于在发送时,模型绑定在WEB API中的工作方式
var data = {
Name: 'Bob Loblaw',
Id: "1"
};
WEB API将您发送的json对象的属性绑定到您定义为参数的类的属性。
所以,为了匹配
var data = {
myClass: { Name: 'Bob Loblaw', Id: "1" }
};
MyComplexClass将需要定义为
public class MyComplexClass
{
public Object myClass{ get; set; }
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句