Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit db935bd

Browse files
committed
Tweak SetQueryParam / SetHashParam
1 parent 248f822 commit db935bd

File tree

2 files changed

+18
-16
lines changed

2 files changed

+18
-16
lines changed

src/ServiceStack.Text/HttpUtils.cs

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,24 +40,18 @@ public static string SetQueryParam(this string url, string key, string val)
4040
var qsPos = url.IndexOf('?');
4141
if (qsPos != -1)
4242
{
43-
int existingKeyPos;
44-
if(qsPos + 1 == url.IndexOf(key, qsPos, PclExport.Instance.InvariantComparison))
45-
{
46-
existingKeyPos = qsPos + 1;
47-
}
48-
else
49-
{
50-
existingKeyPos = url.IndexOf("&" + key, qsPos, PclExport.Instance.InvariantComparison);
51-
if (existingKeyPos != -1)
52-
existingKeyPos++;
53-
}
43+
var existingKeyPos = qsPos + 1 == url.IndexOf(key, qsPos, PclExport.Instance.InvariantComparison)
44+
? qsPos
45+
: url.IndexOf("&" + key, qsPos, PclExport.Instance.InvariantComparison);
5446

5547
if (existingKeyPos != -1)
5648
{
57-
var endPos = url.IndexOf('&', existingKeyPos);
58-
if (endPos == -1) endPos = url.Length;
49+
var endPos = url.IndexOf('&', existingKeyPos + 1);
50+
if (endPos == -1)
51+
endPos = url.Length;
5952

6053
var newUrl = url.Substring(0, existingKeyPos + key.Length + 1)
54+
+ "="
6155
+ val.UrlEncode()
6256
+ url.Substring(endPos);
6357
return newUrl;
@@ -85,13 +79,18 @@ public static string SetHashParam(this string url, string key, string val)
8579
var hPos = url.IndexOf('#');
8680
if (hPos != -1)
8781
{
88-
var existingKeyPos = url.IndexOf(key, hPos, PclExport.Instance.InvariantComparison);
82+
var existingKeyPos = hPos + 1 == url.IndexOf(key, hPos, PclExport.Instance.InvariantComparison)
83+
? hPos
84+
: url.IndexOf("/" + key, hPos, PclExport.Instance.InvariantComparison);
85+
8986
if (existingKeyPos != -1)
9087
{
91-
var endPos = url.IndexOf('/', existingKeyPos);
92-
if (endPos == -1) endPos = url.Length;
88+
var endPos = url.IndexOf('/', existingKeyPos + 1);
89+
if (endPos == -1)
90+
endPos = url.Length;
9391

9492
var newUrl = url.Substring(0, existingKeyPos + key.Length + 1)
93+
+ "="
9594
+ val.UrlEncode()
9695
+ url.Substring(endPos);
9796
return newUrl;

tests/ServiceStack.Text.Tests/HttpUtilsTests.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public void Can_AddQueryParam()
1212
Assert.That("http://example.com?s=0".AddQueryParam("f", "1"), Is.EqualTo("http://example.com?s=0&f=1"));
1313
Assert.That("http://example.com?f=1".AddQueryParam("f", "2"), Is.EqualTo("http://example.com?f=1&f=2"));
1414
Assert.That("http://example.com?s=0&f=1&s=1".AddQueryParam("f", "2"), Is.EqualTo("http://example.com?s=0&f=1&s=1&f=2"));
15+
Assert.That("http://example.com?s=rf&f=1".AddQueryParam("f", "2"), Is.EqualTo("http://example.com?s=rf&f=1&f=2"));
1516
}
1617

1718
[Test]
@@ -31,6 +32,7 @@ public void Can_AddHashParam()
3132
Assert.That("http://example.com#s=0".AddHashParam("f", "1"), Is.EqualTo("http://example.com#s=0/f=1"));
3233
Assert.That("http://example.com#f=1".AddHashParam("f", "2"), Is.EqualTo("http://example.com#f=1/f=2"));
3334
Assert.That("http://example.com#s=0/f=1/s=1".AddHashParam("f", "2"), Is.EqualTo("http://example.com#s=0/f=1/s=1/f=2"));
35+
Assert.That("http://example.com#s=rf/f=1".AddHashParam("f", "2"), Is.EqualTo("http://example.com#s=rf/f=1/f=2"));
3436
}
3537

3638
[Test]
@@ -40,6 +42,7 @@ public void Can_SetHashParam()
4042
Assert.That("http://example.com#s=0".SetHashParam("f", "1"), Is.EqualTo("http://example.com#s=0/f=1"));
4143
Assert.That("http://example.com#f=1".SetHashParam("f", "2"), Is.EqualTo("http://example.com#f=2"));
4244
Assert.That("http://example.com#s=0/f=1/s=1".SetHashParam("f", "2"), Is.EqualTo("http://example.com#s=0/f=2/s=1"));
45+
Assert.That("http://example.com#s=rf/f=1".SetHashParam("f", "2"), Is.EqualTo("http://example.com#s=rf/f=2"));
4346
}
4447
}
4548
}

0 commit comments

Comments
 (0)