6 Commits
1.1.0 ... 1.3.0

Author SHA1 Message Date
khyteang-lim
9b1d037a88 Added ToEscapeString() and ToEscapeDataString() (#11)
* Added ToEscapeString() and ToEscapeDataString(), added desciption in readme, and added unit tests

* added changes from PR feedback
2017-01-30 17:42:11 -05:00
Tommy Parnell
be92d91ef6 readd 461 2016-12-13 13:47:17 -05:00
Tommy Parnell
a1527c058c add path and query 2016-12-13 13:44:06 -05:00
Tommy Parnell
908d0e2433 target 45 2016-12-13 10:57:40 -05:00
Tommy Parnell
e9f3e5ed8b target 40 2016-12-06 07:48:41 -05:00
Tommy Parnell
8b053f0f77 minor doc comment 2016-11-12 16:58:01 -05:00
5 changed files with 98 additions and 18 deletions

View File

@@ -1,10 +1,15 @@
## UriBuilder.Fluent # UriBuilder.Fluent
[![Coverage Status](https://coveralls.io/repos/github/TerribleDev/UriBuilder.Fluent/badge.svg)](https://coveralls.io/github/TerribleDev/UriBuilder.Fluent) [![Build status](https://ci.appveyor.com/api/projects/status/cp704w3bgaerufxm/branch/master?svg=true)](https://ci.appveyor.com/project/tparnell8/uribuilder-fluent/branch/master) [![Coverage Status](https://coveralls.io/repos/github/TerribleDev/UriBuilder.Fluent/badge.svg)](https://coveralls.io/github/TerribleDev/UriBuilder.Fluent) [![Build status](https://ci.appveyor.com/api/projects/status/cp704w3bgaerufxm/branch/master?svg=true)](https://ci.appveyor.com/project/tparnell8/uribuilder-fluent/branch/master)
This places extension methods over System.UriBuilder to help deal with query string parameters, and create more of a fluent interface. Unlike other projects, this NetStandardLibrary compliant package builds ontop of trusty UriBuilder, does not use custom Uri generators, or have outside dependencies. Unit tests continue to be a first class citizen! This places extension methods over System.UriBuilder to help deal with query string parameters, and create more of a fluent interface. Unlike other projects, this NetStandardLibrary compliant package builds ontop of trusty UriBuilder, does not use custom Uri generators, or have outside dependencies. Unit tests continue to be a first class citizen!
This lets you do things like ## Getting started
Just install the nuget package `install-package UriBuilder.Fluent` and thats it. The extension methods should be available to you!
## Code Example
This lets you do things like
```csharp ```csharp
@@ -16,8 +21,6 @@ new UriBuilder()
.UseHttps() .UseHttps()
.ToString() .ToString()
``` ```
result: `https://awesome.com/seg?awesome=yodawg&fun=cool,yay` result: `https://awesome.com/seg?awesome=yodawg&fun=cool,yay`
@@ -35,16 +38,44 @@ result: `https://awesome.com/yo?id=5`
you can even pass a dictionary of parameters you can even pass a dictionary of parameters
```csharp ```csharp
var dictionary = new Dictionary<string, string>()
{ var dictionary = new Dictionary<string, string>()
["yo"] = "dawg" {
}; ["yo"] = "dawg"
new UriBuilder("http://awesome.com") };
.WithParameter(dictionary);
http://awesome.com/?yo=dawg new UriBuilder("http://awesome.com")
.WithParameter(dictionary);
```
result: `http://awesome.com/?yo=dawg`
### ToEscapeString() vs. ToEscapeDataString()
There are two extension methods for performing Uri encoding.
#### ToEscapeString()
Performs encoding only on the Uri query string and returns the Uri as a string.
```csharp
var uri = new UriBuilder("https://awesome.com")
.WithParameter("yo", "dawg<")
.ToEscapeString();
``` ```
## Getting started result: `http://awesome.com/?yo=dawg%3C`
Just install the nuget package `install-package UriBuilder.Fluent` and thats it. The extension methods should be available to you! #### ToEscapeDataString()
Performs encoding on the whole Uri and returns the Uri as a string.
```csharp
var uri = new UriBuilder("https://awesome.com")
.WithParameter("yo", "dawg<")
.ToEscapeDataString();
```
result: `http%3A%2F%2Fawesome.com%2F%3Fyo%3Ddawg%3C`

View File

@@ -35,6 +35,17 @@ namespace FluentUriBuilder.Tests
.WithParameter("awesome", "yodawg"); .WithParameter("awesome", "yodawg");
Assert.Equal("http://awesome.com/?awesome=yodawg", url.Uri.ToString()); Assert.Equal("http://awesome.com/?awesome=yodawg", url.Uri.ToString());
} }
[Fact]
public void PathAndQuery()
{
var url = new UriBuilder().WithPathSegment("/awesome/v1/").WithParameter("awesome", "cool").PathAndQuery();
Assert.Equal("/awesome/v1/?awesome=cool", url);
url = new UriBuilder().WithPathSegment("/awesome/v1").WithParameter("awesome", "cool").PathAndQuery();
Assert.Equal("/awesome/v1?awesome=cool", url);
url = new UriBuilder().WithPathSegment("/awesome/v1").PathAndQuery();
Assert.Equal("/awesome/v1", url);
}
[Fact] [Fact]
public void TestAddParameterArray() public void TestAddParameterArray()
@@ -130,5 +141,21 @@ namespace FluentUriBuilder.Tests
.WithParameter(dictionary); .WithParameter(dictionary);
Assert.Equal("http://awesome.com/?yo=dawg&troll=toll&hammer", url.Uri.ToString()); Assert.Equal("http://awesome.com/?yo=dawg&troll=toll&hammer", url.Uri.ToString());
} }
[Fact]
public void TestToEscapedString()
{
var url = new UriBuilder("http://awesome.com")
.WithParameter("yo","dawg<");
Assert.Equal("http://awesome.com/?yo=dawg%3C", url.ToEscapeString());
}
[Fact]
public void TestToEscapedDataString()
{
var url = new UriBuilder("http://awesome.com")
.WithParameter("yo","dawg<");
Assert.Equal("http%3A%2F%2Fawesome.com%2F%3Fyo%3Ddawg%3C", url.ToEscapeDataString());
}
} }
} }

View File

@@ -9,7 +9,7 @@
}, },
"frameworks": { "frameworks": {
"net461": {}, "net461":{},
"netcoreapp1.0": { "netcoreapp1.0": {
"dependencies": { "dependencies": {
"Microsoft.NETCore.App": { "Microsoft.NETCore.App": {

View File

@@ -22,6 +22,7 @@ namespace System
/// </summary> /// </summary>
/// <param name="bld"></param> /// <param name="bld"></param>
/// <param name="parameterDictionary"></param> /// <param name="parameterDictionary"></param>
/// <exception cref="ArgumentNullException"></exception>
/// <returns></returns> /// <returns></returns>
public static UriBuilder WithParameter(this UriBuilder bld, IDictionary<string, string> parameterDictionary) public static UriBuilder WithParameter(this UriBuilder bld, IDictionary<string, string> parameterDictionary)
{ {
@@ -126,6 +127,8 @@ namespace System
return bld; return bld;
} }
public static string PathAndQuery(this UriBuilder bld) => (bld.Path + bld.Query);
/// <summary> /// <summary>
/// Use Https? /// Use Https?
/// </summary> /// </summary>
@@ -137,5 +140,20 @@ namespace System
bld.Scheme = predicate ? "https" : "http"; bld.Scheme = predicate ? "https" : "http";
return bld; return bld;
} }
/// <summary>
/// Escape Url query string
/// </summary>
/// <param name="bld"></param>
/// <returns></returns>
public static string ToEscapeString(this UriBuilder bld) => Uri.EscapeUriString(bld.Uri.ToString());
/// <summary>
/// Escape the whole Url string
/// </summary>
/// <param name="bld"></param>
/// <returns></returns>
public static string ToEscapeDataString(this UriBuilder bld) => Uri.EscapeDataString(bld.Uri.ToString());
} }
} }

View File

@@ -14,15 +14,19 @@
"extension" "extension"
] ]
}, },
"dependencies": {
"NETStandard.Library": "1.6.0"
},
"authors": [ "authors": [
"Tommy Parnell" "Tommy Parnell"
], ],
"frameworks": { "frameworks": {
"netstandard1.1": { "netstandard1.1": {
"imports": "dnxcore50",
"dependencies": {
"NETStandard.Library": "1.6.0"
}
},
"net40": {
"imports": "dnxcore50" "imports": "dnxcore50"
} },
"net45":{}
} }
} }