将 JSON 发布到 apicontroller

Posted

技术标签:

【中文标题】将 JSON 发布到 apicontroller【英文标题】:Posting JSON to 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); );

【问题讨论】:

【参考方案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";

【讨论】:

以上是关于将 JSON 发布到 apicontroller的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 发布到 apicontroller

AJAX 将 JSON 数据从 Javascript 发布到 Grails

如何将带有 JSON OBJECT 数据的 JSON ARRAY 发布到服务器?

如何将任意 json 对象发布到 webapi

将 json 发布到 struts 2 动作

将 JSON 对象发布到 Symfony 2