diff --git a/src/Dapr.AspNetCore/DaprEndpointRouteBuilderExtensions.cs b/src/Dapr.AspNetCore/DaprEndpointRouteBuilderExtensions.cs index 6269fb7d..558e415c 100644 --- a/src/Dapr.AspNetCore/DaprEndpointRouteBuilderExtensions.cs +++ b/src/Dapr.AspNetCore/DaprEndpointRouteBuilderExtensions.cs @@ -97,7 +97,7 @@ namespace Microsoft.AspNetCore.Builder { var first = e.First(); var rawPayload = e.Any(e => e.EnableRawPayload.GetValueOrDefault()); - var metadataSeparator = e.FirstOrDefault(e => string.IsNullOrEmpty(e.MetadataSeparator)).MetadataSeparator ?? ","; + var metadataSeparator = e.FirstOrDefault(e => !string.IsNullOrEmpty(e.MetadataSeparator)).MetadataSeparator ?? ","; var rules = e.Where(e => !string.IsNullOrEmpty(e.Match)).ToList(); var defaultRoutes = e.Where(e => string.IsNullOrEmpty(e.Match)).Select(e => RoutePatternToString(e.RoutePattern)).ToList(); var defaultRoute = defaultRoutes.FirstOrDefault(); diff --git a/src/Dapr.AspNetCore/TopicAttribute.cs b/src/Dapr.AspNetCore/TopicAttribute.cs index 24d47f62..770bfe18 100644 --- a/src/Dapr.AspNetCore/TopicAttribute.cs +++ b/src/Dapr.AspNetCore/TopicAttribute.cs @@ -28,7 +28,7 @@ namespace Dapr /// The topic name. /// The topic owned metadata ids. /// Separator to use for metadata. - public TopicAttribute(string pubsubName, string name, string[] ownedMetadatas = null,string metadataSeparator = ",") + public TopicAttribute(string pubsubName, string name, string[] ownedMetadatas = null, string metadataSeparator = null) { ArgumentVerifier.ThrowIfNullOrEmpty(pubsubName, nameof(pubsubName)); ArgumentVerifier.ThrowIfNullOrEmpty(name, nameof(name)); @@ -47,7 +47,7 @@ namespace Dapr /// The enable/disable raw pay load flag. /// The topic owned metadata ids. /// Separator to use for metadata. - public TopicAttribute(string pubsubName, string name, bool enableRawPayload, string[] ownedMetadatas = null, string metadataSeparator = ",") + public TopicAttribute(string pubsubName, string name, bool enableRawPayload, string[] ownedMetadatas = null, string metadataSeparator = null) { ArgumentVerifier.ThrowIfNullOrEmpty(pubsubName, nameof(pubsubName)); ArgumentVerifier.ThrowIfNullOrEmpty(name, nameof(name)); @@ -68,7 +68,7 @@ namespace Dapr /// The priority of the rule (low-to-high values). /// The topic owned metadata ids. /// Separator to use for metadata. - public TopicAttribute(string pubsubName, string name, string match, int priority, string[] ownedMetadatas = null, string metadataSeparator = ",") + public TopicAttribute(string pubsubName, string name, string match, int priority, string[] ownedMetadatas = null, string metadataSeparator = null) { ArgumentVerifier.ThrowIfNullOrEmpty(pubsubName, nameof(pubsubName)); ArgumentVerifier.ThrowIfNullOrEmpty(name, nameof(name)); @@ -91,7 +91,7 @@ namespace Dapr /// The priority of the rule (low-to-high values). /// The topic owned metadata ids. /// Separator to use for metadata. - public TopicAttribute(string pubsubName, string name, bool enableRawPayload, string match, int priority, string[] ownedMetadatas = null, string metadataSeparator = ",") + public TopicAttribute(string pubsubName, string name, bool enableRawPayload, string match, int priority, string[] ownedMetadatas = null, string metadataSeparator = null) { ArgumentVerifier.ThrowIfNullOrEmpty(pubsubName, nameof(pubsubName)); ArgumentVerifier.ThrowIfNullOrEmpty(name, nameof(name)); diff --git a/test/Dapr.AspNetCore.IntegrationTest.App/DaprController.cs b/test/Dapr.AspNetCore.IntegrationTest.App/DaprController.cs index 960872be..52e78687 100644 --- a/test/Dapr.AspNetCore.IntegrationTest.App/DaprController.cs +++ b/test/Dapr.AspNetCore.IntegrationTest.App/DaprController.cs @@ -78,6 +78,14 @@ namespace Dapr.AspNetCore.IntegrationTest.App { } + [Topic("pubsub", "metadataseparator", metadataSeparator: "|")] + [HttpPost("/topicmetadataseparatorattr")] + [TopicMetadata("n1", "v1")] + [TopicMetadata("n1", "v2")] + public void TopicMetadataSeparator() + { + } + [Topic("pubsub", "splitTopicAttr", true)] [HttpPost("/splitTopics")] public void SplitTopic() diff --git a/test/Dapr.AspNetCore.IntegrationTest/SubscribeEndpointTest.cs b/test/Dapr.AspNetCore.IntegrationTest/SubscribeEndpointTest.cs index 881a015f..048018a6 100644 --- a/test/Dapr.AspNetCore.IntegrationTest/SubscribeEndpointTest.cs +++ b/test/Dapr.AspNetCore.IntegrationTest/SubscribeEndpointTest.cs @@ -39,7 +39,7 @@ namespace Dapr.AspNetCore.IntegrationTest var json = await JsonSerializer.DeserializeAsync(stream); json.ValueKind.Should().Be(JsonValueKind.Array); - json.GetArrayLength().Should().Be(15); + json.GetArrayLength().Should().Be(16); var subscriptions = new List<(string PubsubName, string Topic, string Route, string rawPayload, string match, string metadata)>(); foreach (var element in json.EnumerateArray()) { @@ -107,7 +107,7 @@ namespace Dapr.AspNetCore.IntegrationTest subscriptions.Should().Contain(("pubsub", "metadata", "multiMetadataTopicAttr", string.Empty, string.Empty, "n1=v1;n2=v2,v3")); subscriptions.Should().Contain(("pubsub", "metadata.1", "multiMetadataTopicAttr", "true", string.Empty, "n1=v1")); subscriptions.Should().Contain(("pubsub", "splitMetadataTopicBuilder", "splitMetadataTopics", string.Empty, string.Empty, "n1=v1;n2=v1")); - + subscriptions.Should().Contain(("pubsub", "metadataseparator", "topicmetadataseparatorattr", string.Empty, string.Empty, "n1=v1|v2")); // Test priority route sorting var eTopic = subscriptions.FindAll(e => e.Topic == "E"); eTopic.Count.Should().Be(3);