12

プロジェクトで Web API を構成する通常の方法を使用していますが、サポートする必要があるレガシー API があります。

次のように日時形式を構成します。

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 では、次のように古い MS AJAX 形式を使用して DateTimes を出力する必要があります。

/日付(1345302000000)/

APIモジュールの1つに別のJSON日付フォーマッタを指定し、グローバル構成をそのままにしておく方法を知っている人はいますか? または、API ごとの構成などの代替手段で問題ありません。ありがとう

4

1 に答える 1

11

Web API には、あなたのようなシナリオ専用のコントローラーごとの構成と呼ばれる概念があります。コントローラーごとの構成では、コントローラーごとに構成を行うことができます。

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 のものを使用します。

于 2012-08-18T14:08:08.340 に答える