Flurl - The elegant way to build URLs & set query params in .Net
A common task when calling web apis or resources from code is building a URL and adding the necessary query string and parameters.
The most common, naive and frequent code that we see to achieve this is :
var userId = 1;
var completed = true;
var someParamValue = "abc";
Uri baseAddress = new Uri("https://jsonplaceholder.typicode.com/");
Uri apiUrl = new Uri($"/todos?userId={userId}&completed={completed}" +
$"&someParam={someParamValue}", UriKind.Relative);
And the typical issue with the above code is that you could accidentally miss the starting ?
or the &
and =
in the query parameters and create bugs; another issue is the readability of the code. When there is a high number of query parameters in the url, the code tends to be messy and unclean.
Flurl to the rescue.
Flurl is a modern, fluent, asynchronous, testable, portable, buzzword-laden URL builder and HTTP client library for .NET
Flurl adds extension methods to strings which helps us easily add path segment, set query params, set fragment, etc. in a clean and elegant manner.
Installing Flurl
Flurl can be installed via NuGet Package manager console as:
PM> Install-Package Flurl
Or via the NuGet Package manager UI:
Once installed, import the Flurl
namespace and convert the messy URLs to more readable ones.
The initial code can now be modified and constructed with flurl as :
using Flurl;
string url = "https://jsonplaceholder.typicode.com/"
.AppendPathSegment("todos")
.SetQueryParam("userId", userId)
.SetQueryParam("completed", completed)
.SetQueryParam("someParam", someParamValue);
Apart from SetQueryParam
there's also SetQueryParams
extension that accepts object, any collection of key-value pairs, Tuples, or a Dictionary object.
Flurl extension methods are available on String
as well on System.Uri
. In either case, it's easy to convert back and forth using the ToString()
and ToUri()
methods.
using Flurl;
Uri url = "https://jsonplaceholder.typicode.com/"
.AppendPathSegment("todos")
.SetQueryParams(new
{
userId = userId,
completed = completed,
someParam = someParamValue
})
.ToUri();
Flurl provides lots of other utilities and extension methods too. Do check out flurl documentation for more details.