Delen via


ConfigurationBinder genereert een fout voor niet-overeenkomende waarden

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.

Geïntroduceerde versie

.NET 8 Preview 1

Vorig gedrag

Voorheen negeerde de volgende code stilzwijgend de fouten voor de velden met ongeldige enumeraties.

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 van brekende verandering

Deze wijziging is een gedragswijziging.

Reden voor wijziging

Het vorige gedrag was verwarrend voor sommige ontwikkelaars. Ze stelden BinderOptions.ErrorOnUnknownConfiguration in op true en verwachtten dat er een uitzondering zou worden gegenereerd als er een probleem zou optreden bij het binden van de configuratie.

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.

Betreffende API's