5

我正在将一些 json 数据发布到我的 asp.net webapi,但 post 参数始终为 null - 数据未正确序列化。该方法看起来像这样:

public HttpResponseMessage Post(string id, RegistrationData registerData)

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

有什么方法可以让 webapi 始终反序列化为 json,并忽略 content-type 标头?

4

2 回答 2

9

我在这里找到了答案: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 格式化程序接受每种类型,并删除 form 和 xml 格式化程序

于 2012-09-12T10:01:48.583 回答
1

我建议宁愿修改传入请求的内容类型,比如在消息处理程序中将其更改为适当的内容类型,而不是从配置中删除格式化程序

于 2012-09-12T15:36:45.730 回答