使用数据注释限制字典中的键及其值的字符数
Limit Keys in a dictionary and number of characters of its value using Data Annotations
下面是我 POST 调用我的网站 API 的请求正文。
{
"region" : "us-east-2",
"namespaceName" : "com.xyx.demo.test",
"tags": {
"description": "Test Namespace",
"purpose": "To store demo objects",
....
}
}
这是我用来绑定此请求的 class。
public class Input
{
public string Region { get; set; }
public string NamespaceName { get; set; }
[Description("A set of key value pairs that define custom tags.")]
public Dictionary<string, string> Tags { get; set; }
}
我想限制我的标签字典只创建 10 个键,每个键的值不应超过 256 个字符。
因此,如果提供的键超过 10 个或值包含超过 256 个字符,我的 ModelState
应该无效。
我如何使用数据注释来做到这一点?
我认为没有任何现有实用程序可用于此。唯一的选择是像下面这样编写自己的转换器
https://www.jerriepelser.com/blog/custom-converters-in-json-net-case-study-1/
您创建自定义验证属性
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class YourAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (!(value is Dictionary<string, string>))
return new ValidationResult("Object is not of proper type");
var dictionary = (Dictionary<string, string>)value;
if (dictionary.Count > 10)
return new ValidationResult("Dictionary cant have more than 10 items");
foreach (var keyValuePair in dictionary)
{
if (keyValuePair.Value.Length > 256)
return new ValidationResult("Value cant be longer than 256.");
}
return ValidationResult.Success;
}
}
那么你的模型
public class Input
{
public string Region { get; set; }
public string NamespaceName { get; set; }
[Description("A set of key value pairs that define custom tags.")]
[YourAttribute]
public Dictionary<string, string> Tags { get; set; }
}
下面是我 POST 调用我的网站 API 的请求正文。
{
"region" : "us-east-2",
"namespaceName" : "com.xyx.demo.test",
"tags": {
"description": "Test Namespace",
"purpose": "To store demo objects",
....
}
}
这是我用来绑定此请求的 class。
public class Input
{
public string Region { get; set; }
public string NamespaceName { get; set; }
[Description("A set of key value pairs that define custom tags.")]
public Dictionary<string, string> Tags { get; set; }
}
我想限制我的标签字典只创建 10 个键,每个键的值不应超过 256 个字符。
因此,如果提供的键超过 10 个或值包含超过 256 个字符,我的 ModelState
应该无效。
我如何使用数据注释来做到这一点?
我认为没有任何现有实用程序可用于此。唯一的选择是像下面这样编写自己的转换器
https://www.jerriepelser.com/blog/custom-converters-in-json-net-case-study-1/
您创建自定义验证属性
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class YourAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (!(value is Dictionary<string, string>))
return new ValidationResult("Object is not of proper type");
var dictionary = (Dictionary<string, string>)value;
if (dictionary.Count > 10)
return new ValidationResult("Dictionary cant have more than 10 items");
foreach (var keyValuePair in dictionary)
{
if (keyValuePair.Value.Length > 256)
return new ValidationResult("Value cant be longer than 256.");
}
return ValidationResult.Success;
}
}
那么你的模型
public class Input
{
public string Region { get; set; }
public string NamespaceName { get; set; }
[Description("A set of key value pairs that define custom tags.")]
[YourAttribute]
public Dictionary<string, string> Tags { get; set; }
}