MVC5 - WebAPI 2 - 当Controller更改为返回HttpResponseMessage时,CamelCase JSON格式化程序停止工作

时间:2014-05-16 20:58:26

标签: asp.net-web-api asp.net-mvc-5 asp.net-web-api2

在我们的Web API 2应用程序中,我们像这样全局配置JSON格式:

var jsonformatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;      
jsonformatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();

这很好用 - JSON是camelcase ..,直到我们改变我们的控制器方法以返回HttpReponseMessage(而不是直接响应模型类型),如下所示:

Request.CreateResponse(HttpStatusCode.OK, response);

这一个更改似乎导致MVC不使用JSON格式化程序。我们的JSON不再是CaemlCase。

这是预期/设计的行为还是我没有正确指定格式化程序?

谢谢, -Mike

1 个答案:

答案 0 :(得分:6)

使用Request.CreateResponse时调用的实际方法是:

public static HttpResponseMessage CreateResponse<T>(
                                          this HttpRequestMessage request, T value)
{
    return request.CreateResponse<T>(HttpStatusCode.OK, value, configuration: null);
}

如您所见,配置属性只是设置为null。

因此,您只需从Request对象手动获取配置并调用另一个重载,如下所示:

Request.CreateResponse(HttpStatusCode.OK, response, Request.GetConfiguration());

如果您对更多细节感兴趣,可以查看框架的源代码。 CreateResponse定义为here