繁体   English   中英

将对象从JavaScript传递到C#

[英]Passing Object from JavaScript to C#

晚上好,现在我有一个用C#编写的后端项目。 我正在尝试将其连接到前端JavaScript代码。 我的js文件中的方法:

var people = [{name: "Sam", age: 40}, {name: "Vivian", age: 20}]    
foo = function () {
            var url = "/api/folder/foo";
            $http({
                method: 'GET', url: url, params: {
                    version: "7.1",
                    ppl: people  <---- the passing that causes error
                }
            }).success(function (data, status, header, config) {
                console.log("success!");
            }).error(function (data, status, header, config) {
                alert("server error");
            });
        };

那就是调用C#代码:

    [HttpPost]
    [ActionName("foo")]
    public List<LoopItem> foo(String version, List<Person> ppl){
        System.Diagnostics.Debug.WriteLine("Success!");
        return repository.foo( version, ppl);
    }

如您所见,我的C#代码将一个字符串和一个人的列表作为参数,这是一个简单的对象:

public class Person
{
    public String name { get; set; }
    public Int32 age { get; set; }
}

尽管在我的js代码中,我试图模仿C#类Person,并创建了具有相同键的对象列表,但是C#函数似乎出于某种原因似乎无法将传递的对象列表识别为Person列表。 结果,没有任何调试“成功”被打印出来。 有谁知道如何解决这个问题?

使用JSON编码/解码。

var people = [{name: "Sam", age: 40}, {name: "Vivian", age: 20}]    
foo = function () {
            var myJsonPeople = JSON.stringify(people);
            var url = "/api/folder/foo";
            $http({
                method: 'POST', url: url, params: {
                    version: "7.1",
                    ppl: myJsonPeople <---- the passing that causes error
                }
            }).success(function (data, status, header, config) {
                console.log("success!");
            }).error(function (data, status, header, config) {
                alert("server error");
            });
        };

在服务器端,您将需要以json形式接收此数据,然后将其转换为对象列表。

[HttpPost]
public string foo(string jsonList)
{
     //Convert string to JSON object
     //Foreach loop for conversion to objects
}

看来您的C#控制器期望POST请求(来自[HttpPost]属性)而不是GET请求。 您需要相应地更改JavaScript请求。

看起来像angular的$http服务。 所以这应该工作:

var url = "/api/folder/foo";
var params = {
                   version: "7.1",
                   ppl: people  
             };
$http.post(url, params)
    .success( //etc 

这使用$http.post ,这是发出POST请求的快捷方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM