Transformando uma app ASP.NET Core MVC em site estático com AspNetStatic
Por Tiago Spana
Geradores de site estático como Hugo, Jekyll e Astro são ótimos — mas todos exigem aprender um stack novo. Se você já trabalha com ASP.NET Core todos os dias, existe um caminho mais curto: continuar escrevendo Controllers e Razor Views e deixar o AspNetStatic exportar tudo como HTML.
Como funciona
O AspNetStatic sobe a sua aplicação normalmente e, em vez de esperar requisições de usuários, ele mesmo faz requisições HTTP para as rotas que você listar. A resposta de cada rota é salva como arquivo em disco. No fim, você tem uma pasta com HTML, CSS e imagens — pronta para qualquer hospedagem estática.
A configuração central é registrar um IStaticResourcesInfoProvider com a lista de rotas:
builder.Services.AddSingleton<IStaticResourcesInfoProvider>(
new StaticResourcesInfoProvider(
[
new PageResource("/"),
new PageResource("/sobre"),
new PageResource("/posts/meu-primeiro-post"),
new BinResource("/favicon.ico"),
]));
E, no fim do Program.cs, disparar a geração:
if (args.HasExitWhenDoneArg())
{
app.GenerateStaticContent(
"../dist",
exitWhenDone: true,
alwaysDefaultFile: true,
dontUpdateLinks: true);
}
Com dotnet run -- ssg, a aplicação sobe, gera os arquivos e encerra sozinha.
Rotas dinâmicas
Como as rotas vêm de uma lista, nada impede que ela seja montada em tempo de execução. Em um blog, por exemplo, basta percorrer os posts carregados do disco e adicionar um PageResource por slug. É exatamente isso que este site faz.
Quando usar
Essa abordagem brilha quando o conteúdo muda apenas em tempo de build — blogs, documentação, landing pages. Se você precisa de conteúdo por usuário ou formulários com processamento no servidor, aí é caso para uma aplicação dinâmica (ou um modo híbrido, que o AspNetStatic também suporta).