在每个控制器的ASP.NET WebAPI上强制使用CamelCase

时间:2013-11-13 14:51:20

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

在ASP.NET WebAPI中,我知道您可以设置默认的json格式化程序,以便在global.aspx中使用CamelCasePropertyNamesContractResolver()来使用驼峰大小写,这会强制所有json序列化为驼峰大小写。

但是,我需要能够在“Per Controller”实例上设置它,而不是全局解决方案。

这可能吗?

4 个答案:

答案 0 :(得分:64)

感谢@KiranChalla,我能够比我想象的更轻松。

这是我创建的非常简单的类:

using System;
using System.Linq;
using System.Web.Http.Controllers;
using System.Net.Http.Formatting;
using Newtonsoft.Json.Serialization;

public class CamelCaseControllerConfigAttribute : Attribute, IControllerConfiguration 
{
  public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
  {
    var formatter = controllerSettings.Formatters.OfType<JsonMediaTypeFormatter>().Single();
    controllerSettings.Formatters.Remove(formatter);

    formatter = new JsonMediaTypeFormatter
    {
      SerializerSettings = {ContractResolver = new CamelCasePropertyNamesContractResolver()}
    };

    controllerSettings.Formatters.Add(formatter);

  }
}

然后只需将该属性添加到您想要CamelCase的任何Controller类。

[CamelCaseControllerConfig]

答案 1 :(得分:10)

是的,有可能......您可以使用IControllerConfiguration来定义每个控制器的特定配置..

This是描述此方案的示例。您可以快速了解如何使用此接口here(来自示例)。

答案 2 :(得分:4)

此Stack Overflow answer应该会有所帮助。它向您展示了如何创建一个ActionFilter,它可以应用于您希望使用CamelCasing的任何操作。

答案 3 :(得分:0)

我知道这已经很老了,但我对接受的答案有疑问,因为格式化程序有其他必要的更改,删除和重新添加后不再存在。我这样做只是修改现有的格式化程序,如本Gist所示:https://gist.github.com/mauricedb/5356933