ConfigurationBinder 因值不一致而引发异常

以前,只有当配置中存在某个值而被绑定的模型中不存在该值时,BinderOptions.ErrorOnUnknownConfiguration 才会用于引发异常。 现在,如果此属性设置为 true,则如果配置中的值无法转换为模型中的值类型,也会引发异常。

引入的版本

.NET 8 预览版 1

旧行为

以前,以下代码以无提示方式接受了包含无效枚举的字段的异常:

public enum TestSettingsEnum
{
    Option1,
    Option2,
}

public class MyModelContainingArray
{
    public TestSettingsEnum[] Enums { get; set; }
}

public void SilentlySwallowsInvalidItems()
{
    var dictionary = new Dictionary<string, string>
    {
        ["Section:Enums:0"] = "Option1",
        ["Section:Enums:1"] = "Option3", // invalid - ignored
        ["Section:Enums:2"] = "Option4", // invalid - ignored
        ["Section:Enums:3"] = "Option2",
    };

    var configurationBuilder = new ConfigurationBuilder();
    configurationBuilder.AddInMemoryCollection(dictionary);
    var config = configurationBuilder.Build();
    var configSection = config.GetSection("Section");

    var model = configSection.Get<MyModelContainingArray>(o => o.ErrorOnUnknownConfiguration = true);

    // Only Option1 and Option2 are in the bound collection at this point.
}

新行为

从 .NET 8 开始,如果无法将配置值转换为模型中值的类型,则会引发 InvalidOperationException

中断性变更的类型

此更改为行为更改

更改原因

以前的行为让一些开发人员感到困惑。 他们将 BinderOptions.ErrorOnUnknownConfiguration 设置为 true,并预期在已绑定配置的情况下遇到任何问题时,引发一个异常。

如果应用具有无法转换为绑定模型中的属性的配置值,请更改或删除这些值。

或者,将 BinderOptions.ErrorOnUnknownConfiguration 设置为 false

受影响的 API