diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/ExtraPropertyBindingHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/ExtraPropertyBindingHelper.cs index cfc8754415..0bd4c43173 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/ExtraPropertyBindingHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ModelBinding/ExtraPropertyBindingHelper.cs @@ -5,33 +5,33 @@ namespace Volo.Abp.AspNetCore.Mvc.ModelBinding public static class ExtraPropertyBindingHelper { /// - /// modelName is a string like "UserInfo.ExtraProperties[SocialSecurityNumber]" + /// is a string like "UserInfo.ExtraProperties[SocialSecurityNumber]" /// This method returns "SocialSecurityNumber" for this example. */ /// - public static string ExtractExtraPropertyName(string modelName) + public static string ExtractExtraPropertyName(string expression) { - var index = modelName.IndexOf(".ExtraProperties[", StringComparison.Ordinal); + var index = expression.IndexOf("ExtraProperties[", StringComparison.Ordinal); if (index < 0) { return null; } - return modelName.Substring(index + 17, modelName.Length - index - 18); + return expression.Substring(index + 16, expression.Length - index - 17); } /// - /// modelName is a string like "UserInfo.ExtraProperties[SocialSecurityNumber]" + /// is a string like "UserInfo.ExtraProperties[SocialSecurityNumber]" /// This method returns "UserInfo" for this example. /// - public static string ExtractContainerName(string modelName) + public static string ExtractContainerName(string expression) { - var index = modelName.IndexOf(".ExtraProperties[", StringComparison.Ordinal); + var index = expression.IndexOf("ExtraProperties[", StringComparison.Ordinal); if (index < 0) { return null; } - return modelName.Left(index); + return expression.Left(index).TrimEnd('.'); } } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ExtraPropertyBindingHelper_Tests.cs b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ExtraPropertyBindingHelper_Tests.cs new file mode 100644 index 0000000000..4f96fae3f5 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo/Abp/AspNetCore/Mvc/ModelBinding/ExtraPropertyBindingHelper_Tests.cs @@ -0,0 +1,48 @@ +using Shouldly; +using Xunit; + +namespace Volo.Abp.AspNetCore.Mvc.ModelBinding +{ + public class ExtraPropertyBindingHelper_Tests + { + [Fact] + public void ExtractExtraPropertyName_Tests() + { + ExtraPropertyBindingHelper.ExtractExtraPropertyName( + "MyObject.UserInfo.ExtraProperties[SocialSecurityNumber]" + ).ShouldBe("SocialSecurityNumber"); + + ExtraPropertyBindingHelper.ExtractExtraPropertyName( + "UserInfo.ExtraProperties[SocialSecurityNumber]" + ).ShouldBe("SocialSecurityNumber"); + + ExtraPropertyBindingHelper.ExtractExtraPropertyName( + "ExtraProperties[SocialSecurityNumber]" + ).ShouldBe("SocialSecurityNumber"); + + ExtraPropertyBindingHelper.ExtractExtraPropertyName( + "SocialSecurityNumber" + ).ShouldBeNull(); + } + + [Fact] + public void ExtractContainerName_Tests() + { + ExtraPropertyBindingHelper.ExtractContainerName( + "MyObject.UserInfo.ExtraProperties[SocialSecurityNumber]" + ).ShouldBe("MyObject.UserInfo"); + + ExtraPropertyBindingHelper.ExtractContainerName( + "UserInfo.ExtraProperties[SocialSecurityNumber]" + ).ShouldBe("UserInfo"); + + ExtraPropertyBindingHelper.ExtractContainerName( + "ExtraProperties[SocialSecurityNumber]" + ).ShouldBe(""); + + ExtraPropertyBindingHelper.ExtractContainerName( + "SocialSecurityNumber" + ).ShouldBeNull(); + } + } +}