일치하지 않는 값으로 인해 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.ErrorOnUnknownConfiguration을 true
로 설정했으며 구성이 바인딩될 때 모든 문제가 발생하면 예외가 발생할 것으로 예상했습니다.
권장 작업
앱에 바인딩된 모델의 속성으로 변환할 수 없는 구성 값이 있는 경우 해당 값을 변경하거나 제거합니다.
또는 BinderOptions.ErrorOnUnknownConfiguration을 false
로 설정합니다.
영향을 받는 API
- 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>)
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET