Dela via


ConfigurationBinder genererar 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 truepå genereras ett undantag även om värdet i konfigurationen inte kan konverteras till typen av värde i modellen.

Version introducerad

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 icke-bakåtkompatibel ändring

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

Orsak till ändringen

Det tidigare beteendet var förvirrande för vissa utvecklare. De angav BinderOptions.ErrorOnUnknownConfiguration till och förväntade sig att true ett undantag skulle utlöses om något problem påträffades 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