Updated versions
Added overload for IEnumerable<KeyValuePair<string, string>>
Added icon
Standardized {'s around validation
This commit is contained in:
BIN
UriBulider.Fluent.png
Normal file
BIN
UriBulider.Fluent.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
@@ -17,7 +17,7 @@ namespace FluentUriBuilder.Tests
|
|||||||
Assert.Throws<ArgumentNullException>(() => tstObj.WithPathSegment(null));
|
Assert.Throws<ArgumentNullException>(() => tstObj.WithPathSegment(null));
|
||||||
Assert.Throws<ArgumentNullException>(() => tstObj.WithScheme(null));
|
Assert.Throws<ArgumentNullException>(() => tstObj.WithScheme(null));
|
||||||
Assert.Throws<ArgumentNullException>(() => tstObj.WithHost(null));
|
Assert.Throws<ArgumentNullException>(() => tstObj.WithHost(null));
|
||||||
Assert.Throws<ArgumentNullException>(() => tstObj.WithParameter(parameterDictionary: null));
|
Assert.Throws<ArgumentNullException>(() => tstObj.WithParameter((IEnumerable<KeyValuePair<string, string>>) null));
|
||||||
Assert.Throws<ArgumentNullException>(() => tstObj.WithFragment(fragmentDictionary: null));
|
Assert.Throws<ArgumentNullException>(() => tstObj.WithFragment(fragmentDictionary: null));
|
||||||
Assert.Throws<ArgumentOutOfRangeException>(() => tstObj.WithPort(-1));
|
Assert.Throws<ArgumentOutOfRangeException>(() => tstObj.WithPort(-1));
|
||||||
UriBuilder nullPtr = null;
|
UriBuilder nullPtr = null;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFrameworks>netcoreapp2.0;net461</TargetFrameworks>
|
<TargetFrameworks>net480;net60;net70</TargetFrameworks>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace System
|
namespace System
|
||||||
{
|
{
|
||||||
public static class TerribleDevUriExtensions
|
public static partial class TerribleDevUriExtensions
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Appends a query string parameter with a key, and many values. Multiple values will be comma seperated. If only 1 value is passed and its null or value, the key will be added to the QS.
|
/// Appends a query string parameter with a key, and many values. Multiple values will be comma seperated. If only 1 value is passed and its null or value, the key will be added to the QS.
|
||||||
@@ -17,21 +17,25 @@ namespace System
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static UriBuilder WithParameter(this UriBuilder bld, string key, params string[] values) => bld.WithParameter(key, valuesEnum: values);
|
public static UriBuilder WithParameter(this UriBuilder bld, string key, params string[] values) => bld.WithParameter(key, valuesEnum: values);
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Appends query strings from dictionary
|
/// Appends query strings from a list of key-value pairs (usually a dictionary).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="bld"></param>
|
/// <param name="bld"></param>
|
||||||
/// <param name="parameterDictionary"></param>
|
/// <param name="parameterDictionary"></param>
|
||||||
/// <exception cref="ArgumentNullException"></exception>
|
/// <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, IEnumerable<KeyValuePair<string, string>> parameterDictionary)
|
||||||
{
|
{
|
||||||
if(bld == null)
|
if (bld == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(bld));
|
throw new ArgumentNullException(nameof(bld));
|
||||||
}
|
}
|
||||||
if(parameterDictionary == null) throw new ArgumentNullException(nameof(parameterDictionary));
|
if (parameterDictionary == null)
|
||||||
foreach(var item in parameterDictionary)
|
{
|
||||||
|
throw new ArgumentNullException(nameof(parameterDictionary));
|
||||||
|
}
|
||||||
|
foreach (var item in parameterDictionary)
|
||||||
{
|
{
|
||||||
bld.WithParameter(item.Key, item.Value);
|
bld.WithParameter(item.Key, item.Value);
|
||||||
}
|
}
|
||||||
@@ -86,7 +90,10 @@ namespace System
|
|||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(bld));
|
throw new ArgumentNullException(nameof(bld));
|
||||||
}
|
}
|
||||||
if(fragmentDictionary == null) throw new ArgumentNullException(nameof(fragmentDictionary));
|
if (fragmentDictionary == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(fragmentDictionary));
|
||||||
|
}
|
||||||
foreach(var item in fragmentDictionary)
|
foreach(var item in fragmentDictionary)
|
||||||
{
|
{
|
||||||
bld.WithFragment(item.Key, item.Value);
|
bld.WithFragment(item.Key, item.Value);
|
||||||
@@ -133,7 +140,10 @@ namespace System
|
|||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(bld));
|
throw new ArgumentNullException(nameof(bld));
|
||||||
}
|
}
|
||||||
if(port < 1) throw new ArgumentOutOfRangeException(nameof(port));
|
if(port < 1)
|
||||||
|
{
|
||||||
|
throw new ArgumentOutOfRangeException(nameof(port));
|
||||||
|
}
|
||||||
bld.Port = port;
|
bld.Port = port;
|
||||||
return bld;
|
return bld;
|
||||||
}
|
}
|
||||||
@@ -149,7 +159,10 @@ namespace System
|
|||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(bld));
|
throw new ArgumentNullException(nameof(bld));
|
||||||
}
|
}
|
||||||
if (bld.Uri.IsDefaultPort) bld.Port = -1;
|
if (bld.Uri.IsDefaultPort)
|
||||||
|
{
|
||||||
|
bld.Port = -1;
|
||||||
|
}
|
||||||
return bld;
|
return bld;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,7 +201,10 @@ namespace System
|
|||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(bld));
|
throw new ArgumentNullException(nameof(bld));
|
||||||
}
|
}
|
||||||
if(string.IsNullOrWhiteSpace(scheme)) throw new ArgumentNullException(nameof(scheme));
|
if (string.IsNullOrWhiteSpace(scheme))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(scheme));
|
||||||
|
}
|
||||||
bld.Scheme = scheme;
|
bld.Scheme = scheme;
|
||||||
return bld;
|
return bld;
|
||||||
}
|
}
|
||||||
@@ -206,7 +222,10 @@ namespace System
|
|||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(bld));
|
throw new ArgumentNullException(nameof(bld));
|
||||||
}
|
}
|
||||||
if(string.IsNullOrWhiteSpace(host)) throw new ArgumentNullException(nameof(host));
|
if (string.IsNullOrWhiteSpace(host))
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(host));
|
||||||
|
}
|
||||||
bld.Host = host;
|
bld.Host = host;
|
||||||
return bld;
|
return bld;
|
||||||
}
|
}
|
||||||
|
|||||||
34
src/UriBuilder.Fluent/TerribleDevUriExtensions_NetCore.cs
Normal file
34
src/UriBuilder.Fluent/TerribleDevUriExtensions_NetCore.cs
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
#if NET6_0_OR_GREATER
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace System
|
||||||
|
{
|
||||||
|
public static partial class TerribleDevUriExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Appends query strings from dictionary
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="bld"></param>
|
||||||
|
/// <param name="parameterDictionary"></param>
|
||||||
|
/// <exception cref="ArgumentNullException"></exception>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static UriBuilder WithParameter(this UriBuilder bld, IEnumerable<(string, string)> parameterDictionary)
|
||||||
|
{
|
||||||
|
if (bld == null) {
|
||||||
|
throw new ArgumentNullException(nameof(bld));
|
||||||
|
}
|
||||||
|
if (parameterDictionary == null) throw new ArgumentNullException(nameof(parameterDictionary));
|
||||||
|
foreach (var item in parameterDictionary) {
|
||||||
|
bld.WithParameter(item.Item1, item.Item2);
|
||||||
|
}
|
||||||
|
return bld;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -2,21 +2,38 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Authors>Tommy Parnell</Authors>
|
<Authors>Tommy Parnell</Authors>
|
||||||
<TargetFrameworks>netstandard1.1;net40;net45;netstandard2.0</TargetFrameworks>
|
<TargetFrameworks>net480;net60;net70</TargetFrameworks>
|
||||||
<AssemblyName>UriBuilder.Fluent</AssemblyName>
|
<AssemblyName>UriBuilder.Fluent</AssemblyName>
|
||||||
<PackageId>UriBuilder.Fluent</PackageId>
|
<PackageId>UriBuilder.Fluent</PackageId>
|
||||||
<PackageTags>Url building;Uri;Uri building;fluent;extension</PackageTags>
|
<PackageTags>Url building;Uri;Uri building;fluent;extension</PackageTags>
|
||||||
<PackageProjectUrl>https://github.com/TerribleDev/UriBuilder.Fluent</PackageProjectUrl>
|
<PackageProjectUrl>https://github.com/TerribleDev/UriBuilder.Fluent</PackageProjectUrl>
|
||||||
|
|
||||||
|
<AssemblyVersion>7.0.0.0</AssemblyVersion>
|
||||||
|
<FileVersion>7.0.0.0</FileVersion>
|
||||||
|
<Version>7.0.0</Version>
|
||||||
|
<PackageIcon>UriBulider.Fluent.png</PackageIcon>
|
||||||
|
<PackageIconUrl />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net40' ">
|
<ItemGroup Condition=" '$(TargetFramework)' == 'net480' ">
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net45' ">
|
<PropertyGroup>
|
||||||
<Reference Include="System" />
|
<PackageReleaseNotes>
|
||||||
<Reference Include="Microsoft.CSharp" />
|
This package adds extension methods over System.UriBuilder to help deal with query string parameters and create more of a fluent interface.
|
||||||
</ItemGroup>
|
Unlike other projects, this NetStandardLibrary compliant package builds ontop of trusty UriBuilder, does not use custom Uri generators, and has no outside dependencies!
|
||||||
|
</PackageReleaseNotes>
|
||||||
|
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||||
|
<SignAssembly>True</SignAssembly>
|
||||||
|
<AssemblyOriginatorKeyFile />
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\..\Readme.md" Pack="true" PackagePath="\" />
|
||||||
|
<None Include="..\..\UriBulider.Fluent.png" Pack="true" PackagePath="\" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
Reference in New Issue
Block a user