共用方式為


針對不符的值擲回 ConfigurationBinder

先前,只有當一個值存在於組態中,但不在繫結的模型中時,則才會使用 BinderOptions.ErrorOnUnknownConfiguration 來引發例外狀況。 現在,如果此屬性設定為 true,當組態中的值無法轉換成模型中的值類型時,也會擲回例外狀況。

導入的版本

.NET 8 Preview 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