diff --git a/Readme.md b/Readme.md index c7d2d4d..ab8ba34 100644 --- a/Readme.md +++ b/Readme.md @@ -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) 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 @@ -16,8 +21,6 @@ new UriBuilder() .UseHttps() .ToString() - - ``` 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 ```csharp - var dictionary = new Dictionary() - { - ["yo"] = "dawg" - }; - new UriBuilder("http://awesome.com") - .WithParameter(dictionary); - http://awesome.com/?yo=dawg + +var dictionary = new Dictionary() +{ + ["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! \ No newline at end of file +#### 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` \ No newline at end of file diff --git a/src/UriBuilder.Fluent.UnitTests/ExtensionTests.cs b/src/UriBuilder.Fluent.UnitTests/ExtensionTests.cs index 5446ef6..238fbd2 100644 --- a/src/UriBuilder.Fluent.UnitTests/ExtensionTests.cs +++ b/src/UriBuilder.Fluent.UnitTests/ExtensionTests.cs @@ -141,5 +141,21 @@ namespace FluentUriBuilder.Tests .WithParameter(dictionary); 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()); + } } } \ No newline at end of file diff --git a/src/UriBuilder.Fluent/TerribleDevUriExtensions.cs b/src/UriBuilder.Fluent/TerribleDevUriExtensions.cs index f07e12e..357e8b7 100644 --- a/src/UriBuilder.Fluent/TerribleDevUriExtensions.cs +++ b/src/UriBuilder.Fluent/TerribleDevUriExtensions.cs @@ -127,10 +127,7 @@ namespace System return bld; } - public static string PathAndQuery(this UriBuilder bld) - { - return bld.Path + bld.Query; - } + public static string PathAndQuery(this UriBuilder bld) => (bld.Path + bld.Query); /// /// Use Https? @@ -143,5 +140,20 @@ namespace System bld.Scheme = predicate ? "https" : "http"; return bld; } + + /// + /// Escape Url query string + /// + /// + /// + public static string ToEscapeString(this UriBuilder bld) => Uri.EscapeUriString(bld.Uri.ToString()); + + /// + /// Escape the whole Url string + /// + /// + /// + public static string ToEscapeDataString(this UriBuilder bld) => Uri.EscapeDataString(bld.Uri.ToString()); + } } \ No newline at end of file