Dela via


ConfigurationBinder utlöser ett fel vid felmatchat värde

BinderOptions.ErrorOnUnknownConfiguration Tidigare användes enbart för att skapa ett undantag om ett värde fanns i konfigurationen men inte i den modell som är bunden till. Om den här egenskapen är inställd på true, kastas ett undantag även om värdet i konfigurationen inte kan konverteras till typen av värde i modellen.

Version lanserad

Förhandsversion 1 av .NET 8

Tidigare beteende

Tidigare svalde följande kod tyst undantagen för fälten som innehöll ogiltiga uppräkningar:

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.
}

Nytt beteende

Från och med .NET 8 genereras ett InvalidOperationException utfall om ett konfigurationsvärde inte kan konverteras till typen av värde i modellen.

Typ av brytande ändring

Den här ändringen är en beteendeförändring.

Orsak till ändring

Det tidigare beteendet var förvirrande för vissa utvecklare. De angav BinderOptions.ErrorOnUnknownConfiguration till true och förväntade sig att ett undantag skulle utlösas om något problem uppstod när konfigurationen var bunden.

Om din app har konfigurationsvärden som inte kan konverteras till egenskaperna i den bundna modellen ändrar eller tar du bort värdena.

Alternativt kan du ange BinderOptions.ErrorOnUnknownConfiguration till false.

Berörda API:er