From 3de33e51eea72266c86c7297c83e1022d9d94491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 30 Dec 2025 12:48:49 +0300 Subject: [PATCH 1/3] Use GetOrNullAsync for feature definition lookup Replaces GetAsync with GetOrNullAsync when retrieving feature definitions in FeatureChecker. This prevents exceptions when a feature is not found and returns null instead, improving error handling. --- .../Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs index 04eef96e6c..39f1cf5be8 100644 --- a/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureChecker.cs @@ -28,7 +28,12 @@ public class FeatureChecker : FeatureCheckerBase public override async Task GetOrNullAsync(string name) { - var featureDefinition = await FeatureDefinitionManager.GetAsync(name); + var featureDefinition = await FeatureDefinitionManager.GetOrNullAsync(name); + if (featureDefinition == null) + { + return null; + } + var providers = FeatureValueProviderManager.ValueProviders .Reverse(); From 5bf06b50f55e432b2372b72ba5f83f25c0aa9f16 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 30 Dec 2025 17:58:40 +0800 Subject: [PATCH 2/3] Use GetOrNullAsync for setting definition lookup --- .../Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs index 2b0bdfcf9f..90c0527067 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingProvider.cs @@ -23,7 +23,12 @@ public class SettingProvider : ISettingProvider, ITransientDependency public virtual async Task GetOrNullAsync(string name) { - var setting = await SettingDefinitionManager.GetAsync(name); + var setting = await SettingDefinitionManager.GetOrNullAsync(name); + if (setting == null) + { + return null; + } + var providers = Enumerable .Reverse(SettingValueProviderManager.Providers); From f5a3526d7b0f746525e457878aa242021084ea05 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 30 Dec 2025 18:44:30 +0800 Subject: [PATCH 3/3] Update test for undefined setting to expect null --- .../SettingManagement/SettingManager_Basic_Tests.cs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_Basic_Tests.cs b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_Basic_Tests.cs index ca9db64c70..95691f53a9 100644 --- a/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_Basic_Tests.cs +++ b/modules/setting-management/test/Volo.Abp.SettingManagement.Tests/Volo/Abp/SettingManagement/SettingManager_Basic_Tests.cs @@ -18,11 +18,10 @@ public class SettingManager_Basic_Tests : SettingsTestBase } [Fact] - public async Task Should_Throw_Exception_When_Try_To_Get_An_Undefined_Setting() + public async Task Should_Return_Null_When_Try_To_Get_An_Undefined_Setting() { - await Assert.ThrowsAsync( - async () => await _settingProvider.GetOrNullAsync("UndefinedSetting") - ); + var value = await _settingProvider.GetOrNullAsync("UndefinedSetting"); + value.ShouldBeNull(); } [Fact] @@ -64,7 +63,7 @@ public class SettingManager_Basic_Tests : SettingsTestBase (await _settingManager.GetOrNullGlobalAsync("MySetting1")).ShouldBe("43"); (await _settingProvider.GetOrNullAsync("MySetting1")).ShouldBe("43"); } - + [Fact] public async Task Set_Should_Throw_Exception_If_Provider_Not_Found() { @@ -72,7 +71,7 @@ public class SettingManager_Basic_Tests : SettingsTestBase { await _settingManager.SetAsync("MySetting1", "43", "UndefinedProvider", "Test"); }); - + exception.Message.ShouldBe("Unknown setting value provider: UndefinedProvider"); } -} \ No newline at end of file +}