Class Url
- Namespace
- Trellis.Primitives
- Assembly
- Trellis.Primitives.dll
Represents a URL value object with format validation. Ensures that URLs are valid and well-formed for web and API scenarios.
[JsonConverter(typeof(ParsableJsonConverter<Url>))]
public class Url : ScalarValueObject<Url, string>, IComparable<ValueObject>, IEquatable<ValueObject>, IConvertible, IScalarValue<Url, string>, IParsable<Url>
- Inheritance
-
Url
- Implements
- Inherited Members
- Extension Methods
Examples
Basic usage:
var url = Url.TryCreate("https://example.com/path");
// Returns: Success(Url("https://example.com/path"))
var withQuery = Url.TryCreate("https://api.example.com/search?q=test");
// Returns: Success(Url("https://api.example.com/search?q=test"))
var invalid = Url.TryCreate("not-a-url");
// Returns: Failure(ValidationError("URL must be a valid absolute HTTP or HTTPS URL."))
Remarks
Url is a domain primitive that encapsulates URL validation and provides:
- URI format validation using .NET's Uri class
- Support for HTTP and HTTPS schemes
- Type safety preventing mixing of URLs with other strings
- Immutability ensuring URLs cannot be changed after creation
- IParsable implementation for .NET parsing conventions
- JSON serialization support for APIs and persistence
- Activity tracing for monitoring and diagnostics
Validation rules:
- Must be a valid absolute URI
- Scheme must be HTTP or HTTPS
- Must have a valid host
Common use cases:
- Website URLs in user profiles
- API endpoints configuration
- Webhook URLs
- Image and resource links
- Redirect URLs
Properties
Host
Gets the host of the URL.
public string Host { get; }
Property Value
IsSecure
Gets whether the URL uses HTTPS.
public bool IsSecure { get; }
Property Value
Path
Gets the path of the URL.
public string Path { get; }
Property Value
Port
Gets the port of the URL.
public int Port { get; }
Property Value
Query
Gets the query string of the URL (including the leading '?').
public string Query { get; }
Property Value
Scheme
Gets the scheme of the URL (http or https).
public string Scheme { get; }
Property Value
Methods
GetEqualityComponents()
Returns the components used for equality comparison. By default, returns the wrapped Value.
protected override IEnumerable<IComparable> GetEqualityComponents()
Returns
- IEnumerable<IComparable>
An enumerable containing the scalar value.
Examples
// Custom equality for Temperature - round to 2 decimal places
protected override IEnumerable<IComparable> GetEqualityComponents()
{
yield return Math.Round(Value, 2);
}
Remarks
Override this method to customize equality comparison. For example, to compare email addresses case-insensitively or to round decimal values.
Parse(string?, IFormatProvider?)
Parses the string representation of a URL to its Url equivalent.
public static Url Parse(string? s, IFormatProvider? provider)
Parameters
sstringproviderIFormatProvider
Returns
ToUri()
Gets the underlying Uri object.
public Uri ToUri()
Returns
TryCreate(string?, string?)
Attempts to create a Url from the specified string.
public static Result<Url> TryCreate(string? value, string? fieldName = null)
Parameters
valuestringThe URL string to validate.
fieldNamestringOptional field name to use in validation error messages.
Returns
- Result<Url>
Success with the Url if the string is a valid HTTP/HTTPS URL; otherwise Failure with a ValidationError.
TryParse(string?, IFormatProvider?, out Url)
Tries to parse a string into a Url.
public static bool TryParse(string? s, IFormatProvider? provider, out Url result)
Parameters
sstringproviderIFormatProviderresultUrl