将JSON发布到apicontroller

Mar*_*ing 10 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";
        }
    }
Run Code Online (Sandbox Code Playgroud)

Bla类:

    public class Bla
    {
        public string Een { get; set; }
        public string Twee { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

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 );
    });

Dar*_*rov 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 );
});
Run Code Online (Sandbox Code Playgroud)

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