Files
ShrlAlgoToolkit/WPFluent/Extensions/UriExtensions.cs

58 lines
1.6 KiB
C#

namespace WPFluent.Extensions;
/// <summary>
/// Extensions for <see cref="Uri"/> class.
/// </summary>
public static class UriExtensions
{
/// <summary>
/// Append provided segments to the <see cref="Uri"/>.
/// </summary>
public static Uri Append(this Uri uri, params string[] segments)
{
if(!uri.IsAbsoluteUri)
{
return uri; // or throw?
}
return new Uri(
segments.Aggregate(
uri.AbsoluteUri,
(current, path) => $"{current.TrimEnd('/').TrimEnd('\\')}/{path.TrimStart('/').TrimStart('\\')}"));
}
/// <summary>
/// Append new <see cref="Uri"/> to the <see cref="Uri"/>.
/// </summary>
public static Uri Append(this Uri uri, Uri value)
{
return new Uri(
$"{uri.ToString().TrimEnd('/').TrimEnd('\\')}/{value.ToString().TrimStart('/').TrimStart('\\')}",
UriKind.RelativeOrAbsolute);
}
/// <summary>
/// Determines whether the end of <see cref="Uri"/> is equal to provided value.
/// </summary>
public static bool EndsWith(this Uri uri, string value) { return uri.ToString().EndsWith(value); }
/// <summary>
/// Removes last segment of the <see cref="Uri"/>.
/// </summary>
public static Uri TrimLastSegment(this Uri uri)
{
if(uri.Segments.Length < 2)
{
return uri;
}
var uriLastSegmentLength = uri.Segments[^1].Length;
var uriOriginalString = uri.ToString();
return new Uri(uriOriginalString[..^uriLastSegmentLength], UriKind.RelativeOrAbsolute);
}
}