c# - 数据注释只允许整数用于长数据类型属性
问题描述
我有一个课程如下,
public class MyClass
{
[Required]
public string Name { get; set; }
[Required]
[Range(1, Int64.MaxValue)]
public long Volume{ get; set; }
}
并在控制器动作中使用了上述类。
[HttpPost]
public void testAction(, MyClass myClass)
{
var state = ModelState.IsValid;
}
为控制器操作传递 json 输入
输入类型 1:{
"Name":"SomeName",
"Volume":12.2
}
没有模态验证失败,并且输入数据映射 Volume 属性为 12。
输入类型 2:{
"Name":"SomeName",
"Volume": "12.2"
}
模型验证错误,“将值“12.2”转换为类型“System.Int64”时出错。”
我想要相同的模型验证失败错误,即使输入提供为“卷”:12.2
如何做到这一点?
提前致谢。
解决方案
您可以创建自己的ValidationAttribute
.
(inputVal % 1) == 0
确保输入值不是浮点数。
public class RangeCustomerAttribute : ValidationAttribute
{
public long MaxValue { get; set; }
public long MinValue { get; set; }
public RangeCustomerAttribute(long minVal, long maxVal)
{
MaxValue = maxVal;
MinValue = minVal;
}
public override bool IsValid(object value)
{
int inputVal;
if (value == null)
return false;
if (int.TryParse(value.ToString(), out inputVal))
{
if (inputVal >= MinValue && inputVal <= MaxValue)
return (inputVal % 1) == 0;
}
return false;
}
}
使用喜欢
public class MyClass
{
[Required]
public string Name { get; set; }
[Required]
[RangeCustomer(1, Int64.MaxValue)]
public long Volume{ get; set; }
}
推荐阅读
- java - 上传对象时aws s3 cli授权和Java API AccessControlList之间的区别
- guzzle - Pardot API - 返回 JSON 而不是 XML
- sympy - 内部 Pyomo 实现错误:“在运算符映射中找不到 sympy 表达式类型 'im'”
- javascript - Laravel Mix IE11 Babel 问题
- java - 如何在 Spring Security Configuration 中重定向到自定义 Vaadin Flow Login Route 作为登录表单
- sockets - send() 和 write() 到已满的 TCP 输出缓冲区不要阻塞
- sql - 将到达存储过程的数据从 int 更改为 string。如何将分隔数据拆分为一组整数并执行过滤器?
- image - 将图像二进制数据保存到 BytesIO
- powershell - 路径中的非法字符在哪里?
- python - 如何在 Python Turtle 中覆盖和重写文本?