将 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的主要内容,如果未能解决你的问题,请参考以下文章
AJAX 将 JSON 数据从 Javascript 发布到 Grails