Flurl para C# (.NET): guia completo com exemplos
Flurl é uma biblioteca moderna e elegante para .NET que combina um construtor de URL fluente com um cliente HTTP. Ela foi criada para tornar o trabalho com requisições HTTP extremamente simples, legível e prático. Em vez de código verboso com HttpClient, UriBuilder e várias concatenações de strings, o Flurl oferece uma sintaxe concisa e expressiva, semelhante às cadeias de métodos do LINQ.
Por que usar Flurl? O principal problema do HttpClient padrão é a verbosidade. Para enviar uma simples requisição GET com parâmetros e cabeçalhos, você precisa escrever de 10 a 15 linhas de código. O Flurl reduz isso para 2 a 3 linhas, tornando o código autodocumentado. Além disso, o Flurl resolve o problema de construção segura de URLs: ele codifica automaticamente os parâmetros, lida com caminhos e query strings, prevenindo erros relacionados à codificação incorreta de caracteres.
A biblioteca é ideal para qualquer cenário que exija interação com APIs REST: desde aplicativos móveis simples até sistemas corporativos complexos. O Flurl suporta todos os métodos HTTP principais, trabalho com JSON, upload de arquivos, timeouts, tentativas de repetição e muito mais. Ele é totalmente assíncrono e compatível com .NET Standard 2.0+, permitindo seu uso em .NET Framework, .NET Core e .NET 5/6/7/8.
Instalação
O Flurl pode ser instalado via NuGet Package Manager. Para trabalhar com requisições HTTP, você precisa do pacote Flurl.Http, que já inclui o Flurl (construtor de URL).
Via .NET CLI:
dotnet add package Flurl.Http
Via Package Manager Console:
Install-Package Flurl.Http
Via Visual Studio: Clique com o botão direito no projeto → Manage NuGet Packages → pesquise "Flurl.Http" → Install.
Se você precisar apenas do construtor de URL sem o cliente HTTP, pode instalar:
dotnet add package Flurl
Início rápido
Um exemplo mínimo funcional — obter dados de uma API pública e exibir no console:
using Flurl.Http;
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// Requisição GET para uma API JSON
var response = await "https://jsonplaceholder.typicode.com/posts/1"
.GetJsonAsync<dynamic>();
Console.WriteLine($"Título: {response.title}");
Console.WriteLine($"Corpo: {response.body}");
}
}
Este código faz uma requisição GET, desserializa automaticamente a resposta JSON em um objeto dinâmico e exibe os campos. Observe: o Flurl permite chamar métodos diretamente em uma string de URL — esse é o estilo "fluente".
Métodos e classes principais
1. Url.Combine() — combinação segura de URLs
Assinatura: public static string Combine(params string[] parts)
O que faz: Combina várias partes de uma URL, adicionando/removendo barras extras automaticamente. Previne a duplicação de barras.
using Flurl;
string fullUrl = Url.Combine("https://api.exemplo.com", "/v1/", "usuarios", "/123");
Console.WriteLine(fullUrl); // https://api.exemplo.com/v1/usuarios/123
2. Url.SetQueryParams() — adição fluente de parâmetros
Assinatura: public static string SetQueryParams(this string url, object values)
O que faz: Adiciona parâmetros de query a uma URL a partir de um objeto anônimo ou dicionário. Codifica os valores automaticamente.
using Flurl;
string url = "https://api.exemplo.com/busca"
.SetQueryParams(new { q = "olá mundo", pagina = 1, limite = 10 });
Console.WriteLine(url);
// https://api.exemplo.com/busca?q=ol%C3%A1%20mundo&pagina=1&limite=10