c# - 范围数据注释不起作用

标签 c# range asp.net-core data-annotations modelstate

在我的 Web api 项目中,我有

[HttpPost]
    public void Post([FromBody]AccountDTO accountDto)

AccountD 包含一些属性,例如:

public int AccountId { get; protected set; }
    [Range(0,100)]
    public int AccountBalance { get; protected set; }
    [RegularExpression(COMMA_SEPARATED_EMAILS_REGEX)]
    public string Emails { get; set; }

我还添加了过滤器来捕获模型错误:

public void OnActionExecuting(ActionExecutingContext context)
    {
        if (!context.ModelState.IsValid)
        {
            throw new InvalidDataException(string.Join(" ", context.ModelState.Keys.SelectMany(key => context.ModelState[key].Errors.Select(x => key + ": " + x.ErrorMessage))));
        }
    }

现在,如果电子邮件字符串无效 - 它会抛出预期的错误,我也尝试了[EmailAddress]、[Phone]、[Required]、[StringLength(3)],并且所有工作都正常好的。 只是 [范围(0,100)] 不起作用...

我尝试使用 accountBallance = 50033333 发布 AccountDTO,并且没有抛出任何错误,还尝试了 -5,状态为 200。

我应该在哪里寻找错误?...谢谢

最佳答案

试试这个也许会有帮助:

[Required(ErrorMessage = "AccountBalance is required")]
[Range(1.00, 100.00, ErrorMessage = "AccountBalance must be between 1 and 100")]
public Double AccountBalance { get; protected set; }

并确保您使用的是 System.ComponentModel.DataAnnotations 。

关于c# - 范围数据注释不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38554887/

相关文章:

c# - 有没有办法在对象实例化后立即调用方法?

MySQL:优化对记录范围的搜索。

c++ - C++11 中是否有一个范围类可用于基于范围的 for 循环?

asp.net-core - 使用 VS Code 进行.NET Core 调试 - "Only 64-bit processes can be debugged"

c# - 如何使用 EditText 字段(纯文本)的输入在服务器上编写/创建文本文件?

c# - 将数据从行保存到数据库

variables - 将变量传递给xquery xpath属性查询

c# - .Net 核心身份和 Azure AD 身份验证

c# - ASP.NET Core 中的 System.Data.Entity.Spatial 替换

c# - 我们必须使用接口(interface)的真实示例......而不是抽象类......写一些代码