Подтвердить что ты не робот

Force CamelCase для ASP.NET WebAPI для каждого контроллера

В ASP.NET WebAPI я знаю, что вы можете установить форматировщик json по умолчанию, чтобы использовать случай верблюда, используя CamelCasePropertyNamesContractResolver() в global.aspx, который заставит ALL json сериализация на верблюжьем корпусе.

Однако мне нужно установить его на экземпляр "Per Controller" вместо глобального решения.

Возможно ли это?

4b9b3361

Ответ 1

Благодаря @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.

[CamelCaseControllerConfig]

Ответ 2

Да, возможно... вы можете использовать IControllerConfiguration для определения конкретной конфигурации для каждого контроллера.

Это - образец, описывающий этот сценарий. Вы можете быстро взглянуть на то, как этот интерфейс следует использовать в здесь (из примера).

Ответ 3

Этот переполнение стека будет полезен. Он показывает вам, как создать ActionFilter, который можно применить к любому действию, в котором вы хотите использовать CamelCasing.