我正在与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 ); });
答案 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,