Developer Documentation
C#
Updated September 19, 2026

URL Encoding and Decoding in C#

Percent-encode URL components correctly and distinguish path, query, and form encoding in C#.

URL encoding is context-sensitive. A path segment, a query value, and application/x-www-form-urlencoded data do not use exactly the same escaping rules, so prefer APIs designed for the specific component you are building.

Quick Start#

The following example uses the standard C# API or a widely used package for this task.

Encode a component#

C#
1string value = "café & tea + cake";2string encoded = Uri.EscapeDataString(value);3string decoded = Uri.UnescapeDataString(encoded);45Console.WriteLine(encoded);6Console.WriteLine(decoded);

Common Operations#

This second pattern covers a common production operation or a safer way to handle real input.

Build a query safely#

C#
1var query = new Dictionary<string, string?>2{3    ["q"] = "café & tea",4    ["page"] = "1"5};67string qs = string.Join("&", query.Select(pair =>8    $"{Uri.EscapeDataString(pair.Key)}={Uri.EscapeDataString(pair.Value ?? string.Empty)}"));

Important Notes#

Do not double-encode percent sequences. Keep raw application values separate from their encoded transport representation.

Best Practices#

  1. Treat external input as untrusted and handle parse/validation errors explicitly.
  2. Keep encoding, units, formats, and library-specific mapping rules explicit at system boundaries.
  3. Add test vectors that cover empty input, Unicode text, malformed input, and representative production data.

References#

Implement URL Encoding in other languages: