diff --git a/framework/src/Volo.Abp.Swashbuckle/Volo/Abp/Swashbuckle/AbpSwashbuckleDocumentFilter.cs b/framework/src/Volo.Abp.Swashbuckle/Volo/Abp/Swashbuckle/AbpSwashbuckleDocumentFilter.cs index 2b61037487..dd1b9705b8 100644 --- a/framework/src/Volo.Abp.Swashbuckle/Volo/Abp/Swashbuckle/AbpSwashbuckleDocumentFilter.cs +++ b/framework/src/Volo.Abp.Swashbuckle/Volo/Abp/Swashbuckle/AbpSwashbuckleDocumentFilter.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using Microsoft.AspNetCore.Mvc.Abstractions; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; @@ -10,6 +11,8 @@ namespace Volo.Abp.Swashbuckle; public class AbpSwashbuckleDocumentFilter : IDocumentFilter { protected virtual string[] ActionUrlPrefixes { get; set; } = new[] { "Volo." }; + + protected virtual string RegexConstraintPattern => @":regex\(([^()]*)\)"; public virtual void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context) { @@ -34,15 +37,22 @@ public class AbpSwashbuckleDocumentFilter : IDocumentFilter { return route; } - - var startIndex = route.IndexOf(":", StringComparison.Ordinal); - var endIndex = route.IndexOf("}", StringComparison.Ordinal); - - if (startIndex == -1 || endIndex == -1) + + route = Regex.Replace(route, RegexConstraintPattern, ""); + + while (route.Contains(':')) { - return route; + var startIndex = route.IndexOf(":", StringComparison.Ordinal); + var endIndex = route.IndexOf("}", startIndex); + + if (endIndex == -1) + { + break; + } + + route = route.Remove(startIndex, (endIndex - startIndex)); } - return route.Remove(startIndex, (endIndex - startIndex)); + return route; } } \ No newline at end of file