如何使用 kendo ui for angular FilterDescriptor 在 odata 查询字符串中生成枚举比较
how to generate an enum comparison in an odata query string with a kendo ui for angular FilterDescriptor
我有一个 ASP WebApi OData v6 项目接受 odata http 查询。
有没有办法使用kendo-angular-uiFilterDescriptor to perform an Equal (eq) operation to match an enum ? My goal is to populate a State that will be used in conjunction with toODataString方法。
问题是 OData 规范要求ui重新枚举是完全合格的。
例如:
SomeField eq My.Fully.Quallified'EnumValue'
(注意单引号只放在枚举的实际值两边)
但是我找不到一种方法来描述放入我的过滤器描述符中的值不是作为字符串而是作为枚举来处理的。
过滤器描述符如下所示:
const myFilterDescriptor = <FilterDescriptor> {
field:'SomeField',
operator:'eq',
value:'My.Fully.Quallified.EnumValue'
};
毫不奇怪,此 FilterDescriptor 将生成以下不正确的 odata 文本:
SomeField eq 'My.Fully.Quallified.EnumValue'
(单引号放错了)
另一种可能性是去掉 odata 段的枚举文本部分。我的意思是,如果我不将文本传递给 FilterDescriptor 值,而是传递枚举数值,问题就会消失。
即:
const myFilterDescriptor = <FilterDescriptor> {
field:'SomeField',
operator:'eq',
value:123
};
默认网络 api odata HttpConfiguration 似乎不允许这样做。
我发现与 WebApi odata v6 相关的 following question proposing the usage of EnableEnumPrefixFree which seem to have disappeared as of web api odata v6. 建议自定义实现以模仿 EnableEnumPrefixFree,但我没有开始工作。
总而言之,我如何在 odata 查询字符串中使用 kendo ui 为 angular FilterDescriptor 轻松生成枚举比较?
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 they now favour DI 开始配置 WebApi odata 层的方法,而不是以前的配置方法(例如 EnableEnumPrefixFree)。
所以现在可以进行以下 odata 比较:
SomeField eq 'EnumValue'
(注意使用数值(如SomeField eq 123
)无效)
因此 FilterDescripror 可以这样使用:
const myFilterDescriptor = <FilterDescriptor> {
field:'SomeField',
operator:'eq',
value:'EnumValue'
};
我有一个 ASP WebApi OData v6 项目接受 odata http 查询。
有没有办法使用kendo-angular-uiFilterDescriptor to perform an Equal (eq) operation to match an enum ? My goal is to populate a State that will be used in conjunction with toODataString方法。
问题是 OData 规范要求ui重新枚举是完全合格的。
例如:
SomeField eq My.Fully.Quallified'EnumValue'
(注意单引号只放在枚举的实际值两边)
但是我找不到一种方法来描述放入我的过滤器描述符中的值不是作为字符串而是作为枚举来处理的。
过滤器描述符如下所示:
const myFilterDescriptor = <FilterDescriptor> {
field:'SomeField',
operator:'eq',
value:'My.Fully.Quallified.EnumValue'
};
毫不奇怪,此 FilterDescriptor 将生成以下不正确的 odata 文本:
SomeField eq 'My.Fully.Quallified.EnumValue'
(单引号放错了)
另一种可能性是去掉 odata 段的枚举文本部分。我的意思是,如果我不将文本传递给 FilterDescriptor 值,而是传递枚举数值,问题就会消失。
即:
const myFilterDescriptor = <FilterDescriptor> {
field:'SomeField',
operator:'eq',
value:123
};
默认网络 api odata HttpConfiguration 似乎不允许这样做。
我发现与 WebApi odata v6 相关的 following question proposing the usage of EnableEnumPrefixFree which seem to have disappeared as of web api odata v6.
总而言之,我如何在 odata 查询字符串中使用 kendo ui 为 angular FilterDescriptor 轻松生成枚举比较?
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 they now favour DI 开始配置 WebApi odata 层的方法,而不是以前的配置方法(例如 EnableEnumPrefixFree)。
所以现在可以进行以下 odata 比较:
SomeField eq 'EnumValue'
(注意使用数值(如SomeField eq 123
)无效)
因此 FilterDescripror 可以这样使用:
const myFilterDescriptor = <FilterDescriptor> {
field:'SomeField',
operator:'eq',
value:'EnumValue'
};