Skip to content

Commit 1de0d2b

Browse files
authored
Merge pull request #185 from espierre/bugfix/issue-171-fix-trailingslash-with-parameters
Fix Issue-171 by adding a validation to check for querystring paramet…
2 parents eb478ad + 9358e2c commit 1de0d2b

File tree

2 files changed

+63
-3
lines changed

2 files changed

+63
-3
lines changed

src/Geta.404Handler/Core/CustomRedirects/CustomRedirectCollection.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ string RemoveSlash(string s)
144144
}
145145

146146
var redirCopy = new CustomRedirect(cr);
147-
var newUrl = AppendSlash(redirCopy.NewUrl);
147+
var newUrl = url.IndexOf("?", StringComparison.Ordinal) > 0 ? redirCopy.NewUrl : AppendSlash(redirCopy.NewUrl);
148148
var appendSegment = RemoveSlash(url.Substring(oldUrl.Length));
149149
redirCopy.NewUrl = $"{newUrl}{appendSegment}";
150150
return redirCopy;

tests/Geta.404Handler.Tests/CustomRedirectCollectionTests.cs

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using System.Web;
44
using BVNetwork.NotFound.Core;
@@ -276,5 +276,65 @@ public void Find_gives_nullreferenceexception_with_partial_deleted_hit()
276276

277277
Assert.NotNull(actual);
278278
}
279+
280+
/// <summary>
281+
/// https://github.com/Geta/404handler/issues/171
282+
/// </summary>
283+
[Fact]
284+
public void Find_does_not_add_slash_when_querystring_parameter()
285+
{
286+
var collection = new CustomRedirectCollection
287+
{
288+
new CustomRedirect("/content/file", "/legacy"),
289+
new CustomRedirect("/content/file/", "/legacy/")
290+
};
291+
292+
var urlToFind = "/content/file?doc=filename";
293+
var expected = "/legacy?doc=filename";
294+
295+
var actual = collection.Find(urlToFind.ToUri());
296+
297+
Assert.Equal(expected, actual.NewUrl);
298+
}
299+
300+
/// <summary>
301+
/// https://github.com/Geta/404handler/issues/171
302+
/// </summary>
303+
[Fact]
304+
public void Find_does_keep_slash_when_querystring_parameter()
305+
{
306+
var collection = new CustomRedirectCollection
307+
{
308+
new CustomRedirect("/content/file", "/legacy"),
309+
new CustomRedirect("/content/file/", "/legacy/")
310+
};
311+
312+
var urlToFind = "/content/file/?doc=filename";
313+
var expected = "/legacy/?doc=filename";
314+
315+
var actual = collection.Find(urlToFind.ToUri());
316+
317+
Assert.Equal(expected, actual.NewUrl);
318+
}
319+
320+
/// <summary>
321+
/// https://github.com/Geta/404handler/issues/171
322+
/// </summary>
323+
[Fact]
324+
public void Find_does_not_add_slash_when_querystring_parameters()
325+
{
326+
var collection = new CustomRedirectCollection
327+
{
328+
new CustomRedirect("/content/file", "/legacy"),
329+
new CustomRedirect("/content/file/", "/legacy/")
330+
};
331+
332+
var urlToFind = "/content/file?doc=filename&param2=value";
333+
var expected = "/legacy?doc=filename&param2=value";
334+
335+
var actual = collection.Find(urlToFind.ToUri());
336+
337+
Assert.Equal(expected, actual.NewUrl);
338+
}
279339
}
280-
}
340+
}

0 commit comments

Comments
 (0)