WebAPI / MVC - 将json列表发送到服务器

时间:2016-07-14 14:05:44

标签: json ajax asp.net-mvc asp.net-web-api

我在向服务器发送2个特定对象时遇到问题。

  1. 我有一个带有输入和文本区域的表单

    发送

    函数SendServer() {  $就({

                url: '/api/Service',
                type: "POST",
                contentType: 'application/json',
                data: {} //!!!
                success: function (response) {
                },
    
                error: function (er) {
                }
            });
    

    }

  2. 问题是我的文本区域将包含以下形式的用户输入json:

    {
      "list": [
        {
          "name": "john smith",
          "lastaccess": "2016-01-01T07:21:31 -00:00"
        },
        {
          "name": "paul marley",
          "lastaccess": "2016-01-01T07:22:31 -00:00"
        }
      ]
    }
    

    我需要将两个值都发送到服务器:

    public class ServiceController : ApiController
    {
      public string Post( *something* )
      {}
    }
    

    我可以到达服务器,但我不知道如何正确发送2个对象,以便我可以在服务器上检索它们?

    我一直在尝试很多选择,没有任何效果:(

1 个答案:

答案 0 :(得分:1)

由于您要发送用户使用表单输入的json,您可以考虑使用JObject类作为您的web api方法参数。

所以在你的表格中

<form id="form1">
    <input type="text" id="val1" name="val1" value="1" />
    <textarea class="form-control" id="json" name="json"></textarea>
    <button id="send">Send</button>
</form>

现在,在按钮上单击,读取两个输入的值并创建一个新对象,然后将其发送到服务器。

$(function () {
    $("#send").click(function (e) {
        e.preventDefault();

        var v = $("#val1").val();
        var t = $("#json").val();
        var d = { val1: v, json: t };
        $.ajax({

            url: '/api/values',
            type: "POST",
            contentType: 'application/json',
            data: JSON.stringify(d),
            success: function (response) {
                console.log(response);
            },

            error: function (er) {
                console.log(er);
            }
        });

    });
});

在WebApi端点中,您可以使用JObject作为参数。默认模型绑定器将能够将发布的值映射到JObject的对象。

    public HttpResponseMessage Post([FromBody]JObject value)
    {
        var v = value["val1"];
        var j = value["json"];
        // do something with these 
        // v.Value will give you the value
        return Request.CreateResponse("Something received");
    }

JObject类属于Newtonsoft.Json.Linq命名空间。因此,请确保使用using语句将其包含在您的web api控制器中。