【问题标题】:MVC5 - WebAPI 2 - CamelCase JSON formatter stopped working when Controller changed to return HttpResponseMessageMVC5 - WebAPI 2 - 当控制器更改为返回 HttpResponseMessage 时,CamelCase JSON 格式化程序停止工作
【发布时间】:2014-07-05 10:43:41
【问题描述】:

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

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

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

Request.CreateResponse(HttpStatusCode.OK, response);

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

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

谢谢, -迈克

【问题讨论】:

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


    【解决方案1】:

    使用 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

    【讨论】:

    • 嗯。感谢您的回复。但似乎它现在没有调用我指定的格式化程序。以前我只有“回复”; (这使用了我的驼峰格式化程序)。现在我使用“Request.CreateResponse(HttpStatusCode.OK, response)”,它没有使用我的格式化程序
    猜你喜欢
    • 2014-02-23
    • 1970-01-01
    • 1970-01-01
    • 2014-09-09
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2016-05-20
    相关资源
    最近更新 更多