RianNegreiros

  • Blog
  • Projetos
  • Currículo

Site Logo
  • Blog
  • Projetos
  • Currículo
  • RSS Feed
© 2025 riannegreiros.xyz. Todos os direitos reservados.
LinkedIn

Criação de URLs amigáveis (slugs) a partir de strings no ASP.NET Core

Publicado 17 de agosto de 2023

Imagem de capa do post: Criação de URLs amigáveis (slugs) a partir de strings no ASP.NET Core

Essa classe que chamei de SlugHelper contém métodos para auxiliar na criação de URLs amigáveis (slugs) a partir de strings.

1public static class SlugHelper
2{
3    public static string RemoveAccents(this string text)
4    {
5        if (string.IsNullOrWhiteSpace(text))
6            return text;
7
8        text = text.Normalize(NormalizationForm.FormD);
9        char[] chars = text
10            .Where(c => CharUnicodeInfo.GetUnicodeCategory(c)
11            != UnicodeCategory.NonSpacingMark).ToArray();
12
13        return new string(chars).Normalize(NormalizationForm.FormC);
14    }
15
16    public static string Slugify(this string phrase)
17    {
18    string output = phrase.RemoveAccents().ToLower();
19
20    output = Regex.Replace(output, @"[^A-Za-z0-9\s\-_]", "");
21
22    output = Regex.Replace(output, @"[\s\-_]+", "-");
23
24    output = output.Trim('-');
25
26    return output;
27    }
28}
29

A principal função dessa classe é transformar uma string em um formato mais adequado para ser usada como parte de uma URL, removendo acentos, caracteres especiais e espaços em branco, substituindo-os por hífens e tornando tudo em letras minúsculas.

Vamos analisar o código linha por linha para entender o que ele faz:

1 - public static string RemoveAccents(this string text)

Declara um método de extensão para a classe string chamado RemoveAccents, que remove os acentos da string.

2 - if (string.IsNullOrWhiteSpace(text)) return text;

Verifica se a string de entrada é nula, vazia ou contém apenas espaços em branco. Se for o caso, retorna a própria string sem modificação.

3 - text = text.Normalize(NormalizationForm.FormD);

Normaliza a string de entrada usando a forma de normalização Unicode D, que separa os caracteres diacríticos (como acentos) dos caracteres-base.

4 - char[] chars = text.Where(c => CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark).ToArray();

Usa LINQ para filtrar os caracteres da string normalizada. Remove todos os caracteres que não são marcas de espaço não espaçadoras (basicamente, remove os acentos).

5 - return new string(chars).Normalize(NormalizationForm.FormC);

Cria uma nova string a partir dos caracteres filtrados e a normaliza novamente usando a forma de normalização Unicode C. Isso garante que a string resultante esteja em uma forma normalizada e sem acentos.

6 - public static string Slugify(this string phrase)

Declara um método de extensão para a classe string chamado Slugify, que transforma a string em um slug.

7 - string output = phrase.RemoveAccents().ToLower();

Tabela de Conteúdos

  • Classe de teste usando xUnit

Chama o método RemoveAccents para remover os acentos e normalizar a string, e então converte a string resultante para letras minúsculas.

8 - output = Regex.Replace(output, @"[^A-Za-z0-9\s\-_]", "");

Usa uma expressão regular para remover todos os caracteres que não são letras, números, espaços, hífens ou underscores.

9 - output = Regex.Replace(output, @"[\s\-_]+", "-");

Usa uma expressão regular para substituir sequências de espaços, hífens e underscores por um único hífen.

10 - output = output.Trim('-');

Remove hífens no início e no final da string, se houver.

11 - return output;

Retorna a string resultante, que agora está no formato de slug, pronto para ser usado em URLs.

Classe de teste usando xUnit

1public class SlugHelperTests
2{
3    [Theory]
4    [InlineData("Hello, World!", "hello-world")]
5    [InlineData("This is a test.", "this-is-a-test")]
6    [InlineData("Slûg Exåmplé", "slug-example")]
7    [InlineData("", "")]
8    [InlineData("----", "")]
9    [InlineData(" Testing Spaces ", "testing-spaces")]
10    [InlineData("ALL CAPS", "all-caps")]
11    [InlineData("Mixed CaSe", "mixed-case")]
12    [InlineData("123_456", "123-456")]
13    [InlineData("Special #Chars!", "special-chars")]
14    public void Slugify_ShouldGenerateCorrectSlugs(string input, string expected) {
15        // Act
16        string actual = SlugHelper.Slugify(input);
17
18        // Assert
19        Assert.Equal(expected, actual);
20    }
21}
22

Em resumo, esse código define uma classe com dois métodos de extensão para strings: RemoveAccents que remove acentos e normaliza a string, e Slugify que gera um slug a partir da string, removendo acentos, caracteres especiais, espaços em branco e substituindo-os por hífens, e convertendo tudo para letras minúsculas. Isso serve para criar URLs mais amigáveis para SEO e para melhorar a usabilidade em aplicações web.