Формат веб-API ASP.NET datetime по-разному между двумя API в одном и том же веб-приложении

Я использую обычный способ настройки веб-API в моем проекте, однако у меня есть API-интерфейс, который мне нужно поддерживать.

Я настраиваю формат datetime следующим образом:

JsonMediaTypeFormatter jsonFormatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
        jsonFormatter.SerializerSettings = new JsonSerializerSettings
        {
            NullValueHandling = NullValueHandling.Include,
            ContractResolver = new CamelCasePropertyNamesContractResolver()
        };
        var converters = jsonFormatter.SerializerSettings.Converters;
        converters.Add(new IsoDateTimeConverter() { DateTimeFormat = "yyyy-MM-ddTHH:mm:ss" });

Это именно то, что я хочу для большинства контроллеров API, однако, с устаревшим API, ему нужно вывести DateTimes, используя старый формат MS AJAX, например:

/Дата (1345302000000)/

Итак, кто-нибудь знает, как я могу указать другой форматир даты JSON для одного из моих модулей API и оставить глобальную конфигурацию как есть? Или любая альтернатива, такая как config для API, будет прекрасной. спасибо

Ответ 1

Web API имеет концепцию Per-Controller, предназначенную для сценариев, подобных вашим. Конфигурация на контроллере позволяет иметь конфигурацию на основе каждого контроллера.

public class MyConfigAttribute : Attribute, IControllerConfiguration
{
    public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
    {
        // controllerSettings.Formatters is a cloned list of formatters that are present on the GlobalConfiguration
        // Note that the formatters are not cloned themselves
        controllerSettings.Formatters.Remove(controllerSettings.Formatters.JsonFormatter);

        //Add your Json formatter with the datetime settings that you need here
        controllerSettings.Formatters.Insert(0, **your json formatter with datetime settings**);
    }
}

[MyConfig]
public class ValuesController : ApiController
{
    public string Get(int id)
    {
        return "value";
    }
}

В приведенном выше примере ValuesController будет использовать форматировщик Json с настройками даты, но остальные контроллеры в вашем случае будут использовать тот, который установлен на GlobalConfiguration.