Локализация перечисления OData v4 Web API - PullRequest
2 голосов
/ 23 апреля 2019

Я пытаюсь использовать сетку Kendo с контроллером OData v4. Отправляя обратно очень простой класс LogEntry, в котором есть перечисление LogLevel, OData не хочет локализовать имя перечисления.

public class LogEntry
{
    public long ID { get; set; }

    public LogLevel Severity { get; set; }
}

public enum LogLevel
{
    [Display(Name = "Crazy Train Trace")]
    Trace = 0,

    [Display(Name = "Who Has Info?")]
    Info = 100,

    [Display(Name = "Lo and Behold: A Warning!")]
    Warning = 200,

    [Display(Name = "Exception")]
    Exception = 300,

    [Display(Name = "Uh oh, Jack...")]
    CriticalException = 400
}

Это мой WebApiConfig.

public static void Register(HttpConfiguration config)
{
    config.MapHttpAttributeRoutes();
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );

    config.Select().Expand().Filter().OrderBy().MaxTop(null).Count();

    var builder = new ODataConventionModelBuilder();
    builder.EntitySet<LogEntry>("LogEntry");
    builder.EnumType<LogLevel>();

    config.MapODataServiceRoute("ODataRoute", "odata", builder.GetEdmModel());
}

Есть ли способ заставить OData использовать какую-либо форму локализации, когда она выплевывает ее для отображения сетки Kendo?

1 Ответ

0 голосов
/ 30 апреля 2019

Из простого 5-минутного поиска исходного кода OData вы можете легко увидеть, что нет никаких оснований ожидать такого поведения.

https://github.com/OData/WebApi/blob/master/src/Microsoft.AspNet.OData.Shared/Formatter/Serialization/ODataEnumSerializer.cs

Решение состоит в том, чтобырасширьте ODataSerializationProvider , чтобы вернуть пользовательский ODataSerializer для случая, когда type == typeof(LogEntry).

Затем введите этот новый ODataSerializationProvider в ODataConventionModelBuilder.

...