如何强制asp.net webapi始终将POST数据解码为JSON

时间:2012-09-12 10:01:49

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

我将一些json数据发布到我的asp.net webapi,但是post参数总是为null - 数据没有正确序列化。该方法如下所示:

public HttpResponseMessage Post(string id, RegistrationData registerData)

似乎问题是客户端(我无法控制)始终将内容类型发送为x-www-form-urlencoded,即使内容实际上是json。这会导致mvc尝试将其反序列化为表单数据,但这会失败。

有没有办法让webapi始终反序列化为json,并忽略内容类型标题?

2 个答案:

答案 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)

我建议修改传入请求的内容类型,让我们在消息处理程序中说出相应的内容类型,而不是从配置中删除格式化程序