C# 如何在ODataConventionModelBuilder中实现自定义约定

C# 如何在ODataConventionModelBuilder中实现自定义约定,c#,odata,data-annotations,C#,Odata,Data Annotations,当针对OData v4服务时,我希望在客户端执行字符串长度验证,以防止数据往返到API,但是如果信息可以通过$metadata传递,我不希望手工编码每个输入字段 事实证明,ODataConventionModelBuilder确实正确地解释了数据类上的MaxLengthaAttribute,并设置了适当的EdmProperty值,但它没有解释StringLengthaAttribute的相应约定。$metadata中的以下代码片段显示了给定假设类定义的预期输出: 公共类NoteType {

当针对OData v4服务时,我希望在客户端执行字符串长度验证,以防止数据往返到API,但是如果信息可以通过$metadata传递,我不希望手工编码每个输入字段

事实证明,
ODataConventionModelBuilder
确实正确地解释了数据类上的
MaxLengthaAttribute
,并设置了适当的
EdmProperty
值,但它没有解释
StringLengthaAttribute
的相应约定。
$metadata
中的以下代码片段显示了给定假设类定义的预期输出:


公共类NoteType
{
[关键]
公共int Id{get;set;}
[长度(100)]
公共字符串标题{get;set;}
[最大长度(500)]
公共字符串说明{get;set;}
}
请注意,
Description
MaxLengthAttribute
注释,但
Title
使用的是
StringLengthAttribute

$metadata中的实际输出不包括
Title
属性的
MaxLength


我无法对数据类定义进行更改,因为它们是从第三方程序集派生的,因此我正在寻找一种通用解决方案,如果数据属性具有定义
MaxLength


在EF6和EFCore中,我习惯于实现自定义约定以在DbContext中实现业务规则,因为
ODataConventionModelBuilder
的名称中包含约定一词,我希望能够定义自己的约定并将其插入管道。但是我找不到一个很好的例子来说明如何做到这一点。

github上有一个open FeatureRequest:github上有一个open FeatureRequest: