我有一个接受OData http查询的ASP WebApi odata v6项目。
是否有一种方法可以使用kendo角ui FilterDescriptor来执行相等(eq)操作来匹配枚举?我的目标是填充一个状态,它将与toODataString方法一起使用。
问题是,OData规范要求枚举必须完全合格。
例如:
SomeField eq My.Fully.量化的‘’EnumValue‘
(请注意,单引号仅放在Enum的实际值周围)
但是,我无法找到一种方法来描述输入到筛选描述符中的值不是作为字符串处理,而是作为枚举来处理。
过滤器描述符如下所示:
const myFilterDescriptor = <FilterDescriptor> {
field:'SomeField',
operator:'eq',
value:'My.Fully.Quallified.EnumValue'
};
毫不奇怪,此FilterDescriptor将生成以下不正确的odata文本:
SomeField eq 'My.Fully.Quallified.EnumValue‘
(单引号放错位置)
另一种可能是去掉odata段的enum文本部分。我的意思是,如果不将文本传递给FilterDescriptor值,我只需传递枚举数值,问题就会消失。
即:
const myFilterDescriptor = <FilterDescriptor> {
field:'SomeField',
operator:'eq',
value:123
};
默认的web odata HttpConfiguration似乎不允许这样做。我发现提出使用EnableEnumPrefixFree的以下问题似乎已经消失了,就像web v6一样。与另一个问题相关的WebApi odata v6建议了一个自定义实现,以模仿EnableEnumPrefixFree,而我并没有做到这一点。
因此,总而言之,如何能够轻松地在带有角FilterDescriptor ?的kendo用户界面的odata查询字符串中生成枚举比较。
发布于 2017-07-12 07:01:40
config.MapODataServiceRoute(
"odata",
"odata",
builder =>
builder.AddService(ServiceLifetime.Singleton, sp => GetEdmModel())
.AddService<IEnumerable<IODataRoutingConvention>>(ServiceLifetime.Singleton, sp =>
ODataRoutingConventions.CreateDefaultWithAttributeRouting("odata", config))
.AddService<ODataUriResolver>(ServiceLifetime.Singleton, sp => new StringAsEnumResolver()));
诀窍是在配置中手动注册StringAsEnumResolver服务。这是从版本6( WebApi )开始配置WebApi odata层的方法,而不是以前的配置方法(如EnableEnumPrefixFree)。
因此,下面的odata比较现在起作用了:
SomeField eq 'EnumValue‘
(请注意,使用数值(如SomeField eq 123
)不起作用)
因此,可以这样使用FilterDescripror:
const myFilterDescriptor = <FilterDescriptor> {
field:'SomeField',
operator:'eq',
value:'EnumValue'
};
https://stackoverflow.com/questions/45040890
复制相似问题