我将一些json数据发布到我的asp.net webapi,但是post参数总是为null - 数据没有正确序列化。该方法如下所示:
public HttpResponseMessage Post(string id, RegistrationData registerData)
似乎问题是客户端(我无法控制)始终将内容类型发送为x-www-form-urlencoded
,即使内容实际上是json。这会导致mvc尝试将其反序列化为表单数据,但这会失败。
有没有办法让webapi始终反序列化为json,并忽略内容类型标题?
答案 0 :(得分:8)
我在这里找到答案:http://blog.cdeutsch.com/2012/08/force-content-types-to-json-in-net.html
此代码需要添加到Application_Start或WebApiConfig.Register
foreach (var mediaType in config.Formatters.FormUrlEncodedFormatter.SupportedMediaTypes)
{
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(mediaType);
}
config.Formatters.Remove(config.Formatters.FormUrlEncodedFormatter);
config.Formatters.Remove(config.Formatters.XmlFormatter);
它告诉json格式化程序接受每个类型,并删除表单和xml格式化程序
答案 1 :(得分:1)
我建议修改传入请求的内容类型,让我们在消息处理程序中说出相应的内容类型,而不是从配置中删除格式化程序