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

Hok*_*ike 5 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();
Run Code Online (Sandbox Code Playgroud)

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

Request.CreateResponse(HttpStatusCode.OK, response);
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢,-Mike

Sof*_*tor 6

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

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

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

所以你可以手动从Request对象获取配置并调用另一个像这样的重载:

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

如果您对更多细节感兴趣,可以查看框架的源代码.CreateResponse 在这里定义