다음을 통해 공유


일치하지 않는 값으로 인해 ConfigurationBinder가 발생합니다.

이전에는 값이 구성에는 있지만 바인딩되는 모델에는 없는 경우 예외를 발생시키는 데에만 BinderOptions.ErrorOnUnknownConfiguration이 사용되었습니다. 이제 이 속성이 true로 설정된 경우 구성의 값을 모델의 값 형식으로 변환할 수 없는 경우에도 예외가 발생합니다.

도입된 버전

.NET 8 미리 보기 1

이전 동작

이전에는 다음 코드가 유효하지 않은 열거형이 포함된 필드에 대한 예외를 자동으로 무시했습니다.

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

새 동작

.NET 8부터 구성 값을 모델의 값 형식으로 변환할 수 없는 경우 InvalidOperationException이 발생합니다.

호환성이 손상되는 변경의 형식

이 변경 사항은 동작 변경입니다.

변경 이유

일부 개발자에게는 이전 동작이 혼란스러웠습니다. BinderOptions.ErrorOnUnknownConfigurationtrue로 설정했으며 구성이 바인딩될 때 모든 문제가 발생하면 예외가 발생할 것으로 예상했습니다.

앱에 바인딩된 모델의 속성으로 변환할 수 없는 구성 값이 있는 경우 해당 값을 변경하거나 제거합니다.

또는 BinderOptions.ErrorOnUnknownConfigurationfalse로 설정합니다.

영향을 받는 API