Delen via


ConfigurationBinder genereert voor niet-overeenkomende waarde

BinderOptions.ErrorOnUnknownConfiguration Voorheen werd alleen gebruikt om een uitzondering te genereren als er een waarde bestond in de configuratie, maar niet in het model waaraan is gebonden. Als deze eigenschap is ingesteld op true, wordt er ook een uitzondering gegenereerd als de waarde in de configuratie niet kan worden geconverteerd naar het type waarde in het model.

Versie geïntroduceerd

.NET 8 Preview 1

Vorig gedrag

Voorheen heeft de volgende code de uitzonderingen voor de velden met ongeldige opsommingen op de achtergrond ingeslikt:

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

Nieuw gedrag

Als vanaf .NET 8 een configuratiewaarde niet kan worden geconverteerd naar het type waarde in het model, wordt er een InvalidOperationException gegenereerd.

Type wijziging die fouten veroorzaken

Deze wijziging is een gedragswijziging.

Reden voor wijziging

Het vorige gedrag was verwarrend voor sommige ontwikkelaars. Ze zijn ingesteld BinderOptions.ErrorOnUnknownConfiguration op true en verwacht dat er een uitzondering wordt gegenereerd als er een probleem is opgetreden toen de configuratie was gebonden.

Als uw app configuratiewaarden bevat die niet kunnen worden geconverteerd naar de eigenschappen in het afhankelijke model, wijzigt of verwijdert u de waarden.

U kunt ook instellen BinderOptions.ErrorOnUnknownConfiguration op false.

Betrokken API's