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 true
på 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.
Rekommenderad åtgärd
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
- Microsoft.Extensions.Configuration.ConfigurationBinder.Bind(IConfiguration, Object, Action<BinderOptions>)
- Microsoft.Extensions.Configuration.ConfigurationBinder.Get<T>(IConfiguration, Action<BinderOptions>)
- Microsoft.Extensions.Configuration.ConfigurationBinder.Get(IConfiguration, Type, Action<BinderOptions>)