我要验证的appSettings中的配置如下所示:
"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类如下所示:
public class Work
{
public string Name { get; set; }
public DateTime? StartDate { get; set; }
public DateTime? EndDate { get; set; }
}这就是我在Startup.cs中获取配置的方式
services.Configure<List<Work>>(Configuration.GetSection("ListOfWork"));对于给定的配置示例,我想验证appSettings中提供的值是好的,我们在自动验证UTests中进行验证,但甚至在此之前,具有无效属性的对象已经被拒绝,我得到的唯一Work对象是Work-1和Work-3。
是否有任何方法可以引发错误,而不是只忽略无效的对象?
发布于 2022-04-08 10:25:14
默认情况下,如果存在解析错误,则应用程序设置中的属性不会自动获取。在您的例子中,“无效日期”是一个字符串,并且是对DateTime的转换?这不可能。我建议稍微调整工作类,以定义字符串属性,而不是DateTime属性,并且只能为DateTime道具使用getter:
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特性,如果您使用的是旧版本,您可能无法完全运行此代码片段,但我相信您理解了这一点,您可以自己实现。
https://stackoverflow.com/questions/71794501
复制相似问题