首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在验证appSettings配置之前,它们将被忽略。

在验证appSettings配置之前,它们将被忽略。
EN

Stack Overflow用户
提问于 2022-04-08 09:15:24
回答 1查看 79关注 0票数 1

我要验证的appSettings中的配置如下所示:

代码语言:javascript
复制
"ListOfWork": [
    {
      "Name": "Work-1",
      "StartDate": "2020-01-01",
      "EndDate": "2021-01-01"
    },
    {
      "Name": "Work-2",
      "StartDate": "2021-01-01",
      "EndDate": "invaliddate"
    },
    {
      "Name": "Work-3",
      "StartDate": "2022-01-01",
      "EndDate": "20231-01-01"
    }
]

Work类如下所示:

代码语言:javascript
复制
public class Work
{        
    public string Name { get; set; }

    public DateTime? StartDate { get; set; }

    public DateTime? EndDate { get; set; }
}

这就是我在Startup.cs中获取配置的方式

代码语言:javascript
复制
services.Configure<List<Work>>(Configuration.GetSection("ListOfWork"));

对于给定的配置示例,我想验证appSettings中提供的值是好的,我们在自动验证UTests中进行验证,但甚至在此之前,具有无效属性的对象已经被拒绝,我得到的唯一Work对象是Work-1Work-3

是否有任何方法可以引发错误,而不是只忽略无效的对象?

EN

回答 1

Stack Overflow用户

发布于 2022-04-08 10:25:14

默认情况下,如果存在解析错误,则应用程序设置中的属性不会自动获取。在您的例子中,“无效日期”是一个字符串,并且是对DateTime的转换?这不可能。我建议稍微调整工作类,以定义字符串属性,而不是DateTime属性,并且只能为DateTime道具使用getter:

代码语言:javascript
复制
 public class Work
{
    private DateTime _startDateTime;
    public string Name { get; set; }

    public string? StartDate { get; set; }

    public string? EndDate { get; set; }

    public DateTime? StartDateTime
    {
        get
        {
            var isDateTime = DateTime.TryParse(StartDate, out var startDate);
            return isDateTime? startDate: null;
            
        }
    }

    public DateTime? EndDateTime
    {
        get
        {
            var isDateTime = DateTime.TryParse(EndDate, out var endDate);
            return isDateTime ? endDate : null;

        }
    }
}

这样,解析就会成功,您可以检查datetime getter中日期时间的有效性。请注意,我使用的是C# 10特性,如果您使用的是旧版本,您可能无法完全运行此代码片段,但我相信您理解了这一点,您可以自己实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71794501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档