Web API OData v4枚举本地化

时间:2019-04-23 16:22:58

标签: c# localization asp.net-web-api2 odata odata-v4

我正在尝试将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网格显示时,是否有任何方法可以使OData使用某种形式的本地化?

1 个答案:

答案 0 :(得分:0)

从OData源代码的5分钟简单搜索中,您可以轻松地看到没有理由期望这种行为。

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

解决方案是扩展ODataSerializationProvider,以在type == typeof(LogEntry)时返回自定义ODataSerializer。

然后将新的ODataSerializationProvider注入ODataConventionModelBuilder