您可以使用命名的JSON属性将复杂对象传递给C#控制器吗?

卢克·布鲁克斯

当我尝试在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对象的属性为myClassall null

我知道,如果我通过了innerDataAJAX呼本身,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对象的结构如何?

佐洛·雷耶斯(Zoilo Reyes)

为什么不使用此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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将复杂的JSON对象传递给ASP.net控制器

Spring MVC,将json对象传递给控制器并返回设置了模型属性的视图

Javascript:将复杂对象传递给我的控制器(asp core)

将JavaScript对象传递给控制器

您可以使用ctypes通过对象的内存ID将对象传递给celery任务吗?

如何将 Ajax Json 对象传递给 .Net Core 中的控制器类?

您可以在创建时将参数传递给AngularJS控制器吗?

您可以将 SQL 查询字符串传递给 Web API 控制器吗?

如何将javascript对象传递给C#MVC 4控制器

将具有 TimeSpan 属性的 JSON 对象传递给 C# WebAPI

将JSON对象传递给MVC控制器时,string.empty转换为null

FormData中的对象数组将0个对象传递给控制器

AngularJS将对象传递给控制器

如何在 Blazor 中使用 Http.GetFromJsonAsync 将模型对象传递给控制器函数

Laravel 5.4:如何通过中间件将模型对象传递给控制器?

将ng-repeat本地对象传递给指令控制器不起作用

将 $.getJSON 对象传递给另一个 ember 控制器

如何将多个相同类型的对象传递给控制器?

如何将多个对象传递给IGListKit节控制器

将原始类型和对象传递给控制器时的区别

将Json复杂对象传递给HttpPost调用

是否可以使用puppeteer将Javascript对象传递给nodejs?

我可以将字典对象传递给Restler吗?

您可以使用OR将多个参数传递给SQL / PHP单个bind语句吗?

如何将复杂的参数传递给控制器?

使用 C# 将数据传递给 ASP.NET MVC 中的控制器

如何将列表中的对象传递给另一个控制器索引函数?

从UITableView中选择行时,将Core Data对象传递给另一个视图控制器

MVC 视图按钮单击事件,将 AngularJs 对象传递给另一个 MVC 控制器