【问题标题】:Posting JSON to apicontroller将 JSON 发布到 apicontroller
【发布时间】:2012-10-05 07:58:40
【问题描述】:

我正在努力使用 Asp.Net 中的“新”WebApi...

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

控制器类

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

Bla 类:

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

API 配置:

config.Routes.MapHttpRoute( 名称:“默认API”, routeTemplate: "api/{controller}/{Action}/{id}", 默认值:新 { id = RouteParameter.Optional } );

发布的数据:

var bla = $.parseJSON('{"Een":"UNO","Twee":"DUE"}'); $.ajax({ 类型:“发布”, url: "/api/utility/Bla", 数据:{Bla:bla}, 数据类型:“json” }).done(函数(味精){ alert("数据保存:" + msg); });

【问题讨论】:

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


    【解决方案1】:

    您可以尝试更改此行吗:

    data: {Bla : bla},
    

    到这里:

    data: bla,
    

    【讨论】:

    • 控制器中也是null,但是JS看起来更干净; tnx
    【解决方案2】:

    我做错了什么!

    您没有发送 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 响应头中自动推导出来。

    【讨论】:

    • 现在如果 $.post 有一个方法告诉它你想发送 JSON 而不是形成 urlencoded 数据,那么一切都将是肉汁。
    【解决方案3】:

    bla 参数可能需要在您的 Post 方法上标记为 [ModelBinder]

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 2014-02-08
      • 2012-05-29
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多