将JSON发布到apicontroller

时间:2012-10-15 10:48:26

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

我正在与Asp.Net中的“新”WebApi挣扎......

我只想发布一些Json,但它没有反序列化我的数据......我做错了什么?!

控制器类

    public class UtilityController : ApiController
    {
        [HttpPost]
        public string Bla(Bla bla)
        {
            return "bla";
        }
    }

Bla Class:

    public class Bla
    {
        public string Een { get; set; }
        public string Twee { get; set; }
    }

Api配置:


    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{Action}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

发布数据:


    var bla = $.parseJSON('{"Een":"UNO","Twee":"DUE"}');
    $.ajax({
    type: "POST",
    url: "/api/utility/Bla",
    data: {Bla : bla},
    dataType: "json"
    }).done(function( msg ) {
    alert( "Data Saved: " + msg );
    });

3 个答案:

答案 0 :(得分:22)

  

我做错了什么!

您没有发送JSON请求。您正在发送application/x-www-form-urlencoded个请求。

因此请确保您发送的是真正的JSON请求:

var bla = { "Een": "UNO", "Twee": "DUE"};
$.ajax({
    type: 'POST',
    url: '/api/utility/Bla',
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify(bla),
}).done(function( msg ) {
    alert( "Data Saved: " + msg );
});

请注意我是如何将contentType标头设置为application/json的,我如何使用JSON.stringify方法发送真正的JSON请求以及我如何摆脱无用的dataType: 'json'参数,jQuery完全能够从服务器发送的Content-Type响应头中自动推断出来。

答案 1 :(得分:0)

可能需要在Post方法上使用bla标记[ModelBinder]参数:

[HttpPost]
public string Bla([ModelBinder]Bla bla)
{
    return "bla";
}

答案 2 :(得分:-1)

您可以尝试更改此行:

data: {Bla : bla},

对此:

data: bla,