首页 > 其他分享 >.net 通过特性及继承IValidatableObject完成自定义表单验证

.net 通过特性及继承IValidatableObject完成自定义表单验证

时间:2024-04-17 17:24:45浏览次数:26  
标签:set return string 自定义 get IValidatableObject net public

Model:

public class PartAItem : IValidatableObject
{
    [Required]
    public string TOKEN { get; set; }
    [Required]
    public string PROJECT_ID { get; set; }
    public string PART { get; set; }
    [Required]
    public string FORM_ID { get; set; }
    public string RATING{ get; set; }
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        //yield return ValidationUtil.Validate_Mandatory(this, "CodeTableModel.Value");

      var ratings = new List<string>() { "C", "A", "N", "G", "S", "P" };

        if (!ratings.Contains(RATING))
        {
            yield return new ValidationResult("PART_A.ITEMS.RATING  must be either " + string.Join(",", ratings) + " or null");
        }
        yield return null;
    }
}

在控制器中可以通过ModelState.IsValid 判断表单验证是否通过

if (!ModelState.IsValid)
    return Content(JsonResultFactory.CreateAPIFailResultPSB(errorCode, "Parameter error:" + GetValidationErrors(ModelState)), contentType);

可以自定义方法来向外抛出验证后的错误内容

private string GetValidationErrors(ModelStateDictionary modelState)
{
    var query = from state in modelState.Values
                from error in state.Errors
                select error.ErrorMessage;

    var errorList = query.ToList();
    return string.Join(",", errorList);
}

最后抛出结果如下图:

 圈出来的就是你自定义抛出的内容了

标签:set,return,string,自定义,get,IValidatableObject,net,public
From: https://www.cnblogs.com/xiaoxiaomini/p/18141269

相关文章

  • 【.NET】利用 IL 魔法实现随心随意的泛型约束
    众所周知,C#只支持对基类/接口/class/struct/new()以及一些IDE魔法的约束,比如这样publicstaticstringTest<T>(Tvalue)whereT:ITest{returnvalue.Test();}publicinterfaceITest{stringTest();}但是如果我们想要随心所欲的约束就不行了publicst......
  • 修改kubernetes服务nodeport类型的端口范围
    原文链接编辑kube-apiserver.yaml文件vim/etc/kubernetes/manifests/kube-apiserver.yaml找到–service-cluster-ip-range这一行,在这一行的下一行增加如下内容--service-node-port-range=80-30000实际案例内容如apiVersion:v1kind:Podmetadata:creationTimestamp......
  • .Net6-利用IServiceProvider实现全局依赖注入
    需求背景:自定义类库程序中的类文件引用IService接口对象并实现依赖注入。1.修改应用程序Program.cs文件1varbuilder=WebApplication.CreateBuilder(args);2builder.Services.AddProgramService();345varapp=builder.Build();6InternalApp.ServiceProvider=a......
  • 一个.NET内置依赖注入的小型强化版
    前言.NET生态中有许多依赖注入容器。在大多数情况下,微软提供的内置容器在易用性和性能方面都非常优秀。外加ASP.NETCore默认使用内置容器,使用很方便。但是笔者在使用中一直有一个头疼的问题:服务工厂无法提供请求的服务类型相关的信息。这在一般情况下并没有影响,但是内置容器支......
  • 记一次 .NET某炉膛锅炉检测系统 崩溃分析
    一:背景1.讲故事上个月有个朋友在微信上找到我,说他们的软件在客户那边隔几天就要崩溃一次,一直都没有找到原因,让我帮忙看下怎么回事,确实工控类的软件环境复杂难搞,朋友手上有一个崩溃的dump,刚好丢给我来分析一下。二:WinDbg分析1.程序为什么会崩溃windbg有一个厉害之处在于双......
  • 解决.Net6 部署到ubuntu22.04中使用DotNetCore.NPOI 导出报 Could not open display (
    在Ubuntu22环境下,出现"Couldnotopendisplay(X-Serverrequired.CheckyourDISPLAYenvironmentvariable)"错误可能是由于缺少X服务器或未正确配置DISPLAY环境变量导致的。以下是你可以尝试的解决方法:检查DISPLAY环境变量:确保DISPLAY环境变量已正确设置。使......
  • openGauss在kubernetes集群环境上的部署
    opengauss实践总结学习心openGauss是一款开源关系型数据库管理系统,深度融合华为在数据库领域多年的经验,结合企业级场景需求,持续构建竞争力特性;kubernetes也是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kuber......
  • 用log4net写入不同路径的日志文件
      用log4net写入不同路径的日志文件///<summary>///根据_jobName路径写入不同日志///</summary>publicclassNLogger{privatestaticDictionary<string,ILog>Loggers=newDictionary<string,ILog>();privatestr......
  • ContextMenu【自定义】
    ContextMenu样式对应的xaml代码: <ResourceDictionaryxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"><StyleTargetType="{x:Type......
  • 测试Netty高并发工具
    测试Netty应用程序的高并发性能工具JMeterJMeter:ApacheJMeter是一个功能强大的用于性能测试的工具,可以模拟大量用户对Netty服务器的并发请求。你可以创建各种测试计划来模拟不同负载条件下的性能表现。wrkwrk:wrk是一个现代的HTTP基准测试工具,它可以轻松地对Netty服务器进......