From 477324771908508b7b1f2ff55ab53c493e355cca Mon Sep 17 00:00:00 2001 From: Nathan Heskew Date: Mon, 22 Nov 2010 22:56:57 -0800 Subject: [PATCH] Updating the UrlRuleProvider to clean up trailing slashes priour to running the comparison work item: 16798 --HG-- branch : dev --- .../Widgets/RuleEngine/UrlRuleProviderTest.cs | 8 ++++++++ .../Orchard.Widgets/RuleEngine/UrlRuleProvider.cs | 12 +++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/Orchard.Tests.Modules/Widgets/RuleEngine/UrlRuleProviderTest.cs b/src/Orchard.Tests.Modules/Widgets/RuleEngine/UrlRuleProviderTest.cs index 7f0b05e46..e41b15821 100644 --- a/src/Orchard.Tests.Modules/Widgets/RuleEngine/UrlRuleProviderTest.cs +++ b/src/Orchard.Tests.Modules/Widgets/RuleEngine/UrlRuleProviderTest.cs @@ -61,5 +61,13 @@ namespace Orchard.Tests.Modules.Widgets.RuleEngine { _urlRuleProvider.Process(context); Assert.That(context.Result, Is.True); } + + [Test] + public void UrlForAboutPageWithEndingSlashMatchesAboutPagePath() { + _stubContextAccessor.StubContext = new StubHttpContext("~/About/"); + var context = new RuleContext { FunctionName = "url", Arguments = new[] { "~/about" } }; + _urlRuleProvider.Process(context); + Assert.That(context.Result, Is.True); + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/UrlRuleProvider.cs b/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/UrlRuleProvider.cs index 9f11ba7e9..b6fa22679 100644 --- a/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/UrlRuleProvider.cs +++ b/src/Orchard.Web/Modules/Orchard.Widgets/RuleEngine/UrlRuleProvider.cs @@ -23,11 +23,17 @@ namespace Orchard.Widgets.RuleEngine { appPath = ""; url = string.Format("{0}/{1}", appPath, url); } - if (url != "/" && !url.Contains("?") && url.EndsWith("/")) + + if (!url.Contains("?")) url = url.TrimEnd('/'); + + var requestPath = context.Request.Path; + if (!requestPath.Contains("?")) + requestPath = requestPath.TrimEnd('/'); + ruleContext.Result = url.EndsWith("*") - ? context.Request.Path.ToUpperInvariant().StartsWith(url.TrimEnd('*').ToUpperInvariant()) - : context.Request.Path.ToUpperInvariant() == url.ToUpperInvariant(); + ? requestPath.StartsWith(url.TrimEnd('*'), StringComparison.OrdinalIgnoreCase) + : string.Equals(requestPath, url, StringComparison.OrdinalIgnoreCase); } } } \ No newline at end of file