首页 > 编程语言 >asp.net core配置验证

asp.net core配置验证

时间:2023-08-14 21:44:56浏览次数:38  
标签:Category core asp 验证 builder get APIConfig net public

  在开发asp.net core时,通常会在appsettings.json中配置信息,这些信息都是以一个json的格式存储,在程序中通过Options的方式来绑定实体类使用,如下面的APIConfig和实体类。

  配置文件:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  
  "APIConfig": {
    "TimeOut": 2000,
    "Category": "Small",
    "Max": 1.5
  }
}

APIConfig实体类:

public class APIConfig
{
    public int TimeOut { get; set; }
    public string? Category { get; set; }
    public double Max { get; set; }
}
public enum Category
{
    None,
    Large,
    Small,
    Middle
}

  配置裸奔是有相当风险的,每个配置项都应该特定的含义和范围,当不合规配置随着系统启动,悄悄地进入服务状态时,就相当埋了一颗雷,肯定有人会在某时间踩上,爆掉,形成一次生产事帮。为了把这个风险消除掉,那就要给这些配置设置个围栏——即验证。

  可以在服务启动时,添加Valdate来验证配置文件。首先用Bind方式取出要验证的配置实体,再次就是用Validate方法逐个验证为了把问题尽早暴露,当然,怎么验证,验证那些属性,自行决定。

using Microsoft.Extensions.Options;
using System.ComponentModel.DataAnnotations;

var builder = WebApplication.CreateBuilder(args);
builder.Services
    .AddOptions<APIConfig>()
    .Bind(builder.Configuration.GetSection(nameof(APIConfig)))
    .Validate(c =>
    {
        return c.TimeOut > 0 && c.TimeOut <= 1000 && c.Max >= -1.5 && c.Max <= 1.5 && Enum.TryParse<Category>(c.Category, true, out Category o);
    },"APIConfig配置有误!")
    .ValidateOnStart();
var app = builder.Build();
app.MapGet("/apiconfig", (IOptions<APIConfig> options) =>
{
    return options.Value;
});
app.Run();

  其实验证在.net很普及,使用的是DataAnnotations,当然,这里也不例外,可以在实体类上添加具体的验证规则,这里就不展开了。代码如下:

using Microsoft.Extensions.Options;
using System.ComponentModel.DataAnnotations;

var builder = WebApplication.CreateBuilder(args);
builder.Services
    .AddOptions<APIConfig>()
    .Bind(builder.Configuration.GetSection(nameof(APIConfig)))
    .ValidateDataAnnotations()
    .ValidateOnStart();
var app = builder.Build();
app.MapGet("/apiconfig", (IOptions<APIConfig> options) =>
{
    return options.Value;
});
app.Run();

public class APIConfig
{
    [Range(0,1000)]
    public int TimeOut { get; set; }
    [EnumDataType(typeof(Category))]
    public string? Category { get; set; }
    [Range(-1.5, 1.5)]
    public double Max { get; set; }
}

public enum Category
{
    None,
    Large,
    Small,
    Middle
}

  保障生产安全,再多一点努力也是值的。不放过每个小细节,让你的服务在成长。

  想要更快更方便的了解相关知识,可以关注微信公众号 

 

标签:Category,core,asp,验证,builder,get,APIConfig,net,public
From: https://www.cnblogs.com/ljknlb/p/17629847.html

相关文章

  • ASP.NET Core Identity 系列之四
    这节我们主要介绍ASP.NETCoreIdentity认证,认证是决定用户是否能够成功登录应用程序的一个过程,用户通过提供自己的用户名和密码来证明他们自己是真实用户,当登录成功时,Identity认证用户并且赋予访问ASP.NETCore应用程序安全资源1、ASP.NETCoreIdentity如何认证我们创建AS......
  • ASP.NET Core Identity 系列之四
    这节我们主要介绍ASP.NETCoreIdentity认证,认证是决定用户是否能够成功登录应用程序的一个过程,用户通过提供自己的用户名和密码来证明他们自己是真实用户,当登录成功时,Identity认证用户并且赋予访问ASP.NETCore应用程序安全资源1、ASP.NETCoreIdentity如何认证我们创建AS......
  • ASP.NET系统对象
    ASP.net中基础的系统对象有Page、Response、request、Server对象Page对象--->是指页面自我的形式,在整个页面执行周期内都可以使用该对象属性:IsPostBack Bool值指示页面是否响应客户端回发而加载,或其是否正确被首次加载protectedvoidPage_Load(objectsender,EventArgs......
  • spring spring.core IOC xml 注册
    publicclassSpringUtils{staticIApplicationContextcontext;publicstaticTGetObject<T>(stringname)whereT:class{if(context==null){context=newXmlApplicatio......
  • 云原生周刊:Kubernetes v1.28 新特性一览 | 2023.8.14
    推荐一个GitHub仓库:Fast-Kubernetes。Fast-Kubernetes是一个涵盖了Kubernetes的实验室(LABs)的仓库。它提供了关于Kubernetes的各种主题和组件的详细内容,包括Kubectl、Pod、Deployment、Service、ConfigMap、Volume、PV、PVC、Daemonset、Secret、Affinity、Taint-Tolerati......
  • Asp.Net 调用耗时Exe
    先上代码前端添加任务时检查任务管理器是否已经运行该进程,没有就启动Exe程序varpro=Process.GetProcesses().Where(w=>"ABC".Equals(w.ProcessName.ToLower().Trim())).Select(s=>s).ToList();if(pro.Count==0){Processp=newProcess();p.StartInfo.WorkingDir......
  • Spring batch document 2.1.8(supported by spring core 3.0)
    http://static.springsource.org/spring-batch/reference/html-single/index.html#configuringAJob SpringBatch-ReferenceDocumentationAuthorsLucasWard,DaveSyer,ThomasRisberg,RobertKasanicky,DanGarrette,WayneLund......
  • .net中如何证明List<int>是线程非安全的
      我们可以通过以下代码来验证List<int>为何是线程非安全的,执行以下代码,然后查看输出结果。  staticvoidMain(){vartoCount=100;#regionlist线程非安全varlist=newList<int>();//并行添加元素Parallel......
  • C#.NET实现大文件上传
    ​ ASP.NET上传文件用FileUpLoad就可以,但是对文件夹的操作却不能用FileUpLoad来实现。下面这个示例便是使用ASP.NET来实现上传文件夹并对文件夹进行压缩以及解压。ASP.NET页面设计:TextBox和Button按钮。 ​编辑TextBox中需要自己受到输入文件夹的路径(包含文件夹),通过Butt......
  • ASP.NET Core中路由规则匹配
    RESTful约束,如果在一个控制器里面有多个Get、Post...的操作1、在一个控制器里面可以定义多个API方法2、通过路由规则来区分///<summary>///获取用户信息///</summary>///<paramname="user"></param>///<returns></returns>[HttpGet]publicUserGetUser(){//...}GetUs......