.netcore 使用Required对model数据验证

具体示例

1.创建一个要验证的类型

  来自:https://www.jianshu.com/p/cc5adac91e34

public class Movie
   {
       public int ID { get; set; }

       [StringLength(60, MinimumLength = 3)]
       [Required]
       public string Title { get; set; }

       [Display(Name = "放映日期")]
       [DataType(DataType.Date)]
       [Range(typeof(DateTime), "1/1/1966", "1/1/2020")]
       public DateTime ReleaseDate { get; set; }

       [Range(1, 100)]
       [DataType(DataType.Currency)]
       public decimal Price { get; set; }

       [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
       [Required]
       [StringLength(30)]
       public string Genre { get; set; }

       [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
       [StringLength(5)]
       [Required]
       public string Rating { get; set; }
   }

2.添加ActionFilter在请求时验证

   获取到一个错误就返回,要返回全部可以拼接错误信息返回

 public class APIActionFilter : IActionFilter
    {
        public void OnActionExecuted(ActionExecutedContext context)
        {
        } 
        public void OnActionExecuting(ActionExecutingContext context)
        {
            var modelState = context.ModelState;
            if (!modelState.IsValid)
            {
                string error = string.Empty;
                foreach (var key in modelState.Keys)
                {
                    var state = modelState[key];
                    if (state.Errors.Any())
                    {
                        error = state.Errors.First().ErrorMessage;
                        break;
                    }
                }

                PublicResponse result = new PublicResponse()
                {
                    isErro = 1,
                    errCode = "1000",
                    errmsg = error
                };

                context.Result = new JsonResult(result);
            }
        }
}

3.Startup.cs中添加对Filter的注册

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc(option =>
            {
                option.Filters.Add<APIActionFilter>();
            });
        }

4.划重点------去掉自动验证,不然不会走自己写的这个验证

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc(option =>
            {
                option.Filters.Add<APIActionFilter>();
            });
             //关闭自动验证 走过滤器进行验证
            services.Configure<ApiBehaviorOptions>(options =>         
              options.SuppressModelStateInvalidFilter = true);
        }

这样就完事了

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 .NET Core Socket 进行 SSL/TLS 通信时,可以使用 X509Certificate2 类来验证证书。具体步骤如下: 1. 实例化 X509Certificate2 对象,将证书加载进来。 ```csharp var cert = new X509Certificate2("path/to/certificate.pfx", "password"); ``` 2. 创建 SslStream 对象,并在构造函数中指定套接字和是否进行身份验证。 ```csharp var sslStream = new SslStream(socket, false, ValidateCertificate); ``` 第二个参数指定是否在 SSL/TLS 握手期间进行身份验证。如果指定为 true,则会在握手期间验证服务器证书和客户端证书(如果有)的有效性。如果指定为 false,则可以在握手之后显式地调用 ValidateCertificate 方法来验证证书。 3. 在 ValidateCertificate 方法中,可以使用 X509Chain 类来验证证书链的有效性。 ```csharp private bool ValidateCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { if (sslPolicyErrors == SslPolicyErrors.None) { // 证书链有效 return true; } // 验证证书链的有效性 var chainPolicy = new X509ChainPolicy(); chainPolicy.RevocationMode = X509RevocationMode.NoCheck; chainPolicy.VerificationFlags = X509VerificationFlags.IgnoreUnknownAuthority | X509VerificationFlags.IgnoreEndRevocationUnknown; if (!chain.Build(new X509Certificate2(certificate))) { // 证书链无效 return false; } // 验证证书链中的每个证书是否被信任 foreach (var chainElement in chain.ChainElements) { if (!chainElement.Certificate.Verify()) { // 证书无效 return false; } } // 证书链有效 return true; } ``` 在上面的代码中,我们首先检查 sslPolicyErrors 参数,如果为 SslPolicyErrors.None,则表示证书链是有效的,可以直接返回 true。 如果 sslPolicyErrors 不为 SslPolicyErrors.None,则需要使用 X509Chain 类来验证证书链的有效性。我们创建了一个 X509ChainPolicy 对象,并指定了 RevocationMode 和 VerificationFlags 属性。然后,我们调用 chain.Build 方法来构建证书链,并检查结果是否为 true。如果结果为 false,则证书链是无效的,返回 false。 如果证书链是有效的,则需要验证证书链中的每个证书是否被信任。我们使用 foreach 循环遍历证书链中的每个证书,并调用 Verify 方法来验证证书是否被信任。如果有任何一个证书无效,则返回 false。如果所有证书都被信任,则返回 true,表示证书链是有效的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值