ASP.NET Core + ngrok: expondo na Internet aplicações executadas localmente

Renato Groffe
4 min readDec 20, 2021

--

Ao trabalharmos com aplicações ASP.NET Core localmente podemos facilmente selecionar a porta em que as mesmas serão executadas, com isto acontecendo através de ajustes em arquivos de configuração ou via parametrização com o comando dotnet run. Abordei inclusive essa segunda opção recentemente no seguinte artigo:

ASP.NET Core: definindo a porta de execução via dotnet run

Mas e se fosse possível expormos essas aplicações executadas em ambientes locais também na Internet, sem as complicações típicas de infraestrutura para situações como essas (certificados, firewalls, ajustes em servidores…) e viabilizando com isso testes simples? Poderíamos assim validar o comportamento de nossos projetos mais rapidamente, além de conduzir provas de conceito (PoCs) sem a necessidade de criação de recursos em nuvem ou até mesmo nos valendo de servidores on-premise. Existe realmente uma alternativa para isto?

A resposta a tais questionamentos está na ferramenta de linha de comando ngrok. Trata-se de uma alternativa que pode ser utilizada gratuitamente, expondo uma aplicação local com segurança na Internet. O ngrok também conta com vários planos de utilização, em que diferentes faixas de valores oferecem capacidades adicionais em relação ao modo básico. O próprio site desta solução destaca que a concessão gratuita deve ser utilizada para cenários mais simples, evitando o processamento de grandes volumes de transações em uma Web App.

Neste artigo demonstrarei como configurar o ngrok em um ambiente Windows, muito embora esta solução também ofereça o suporte a Linux, macOS e containers Docker. Na sequência demonstrarei ainda como utilizar o ngrok em conjunto com uma aplicação ASP.NET Core, executando a mesma localmente com o comando dotnet run e liberando seu acesso a partir da Internet.

E aproveito este espaço para um convite…

Dia 10/01/2022 (segunda) às 21:00 horário de Brasília — teremos mais um evento online e gratuito no canal Canal .NET.

Será uma live em que apresentarei exemplos utilizando vários frameworks e a integração com soluções como o Azure DevOps, bem como novidades do .NET 6 e orientações sobre como automatizar os testes, o build e o deployment de seus projetos.

Para participar faça sua inscrição no link a seguir, a transmissão acontecerá via YouTube:

https://bit.ly/live-testes-dotnet6-dicas-truques-novidades

Instalando e configurando o ngrok

Para instalar rapidamente o ngrok em Windows podemos utilizar o gerenciador de pacotes Chocolatey, executando para isso a instrução:

choco install ngrok

Uma conta deverá então ser criada no site do ngrok:

https://ngrok.com/

Concluído este procedimento, o próximo passo será registrar o token disponibilizado pelo ngrok:

Por meio do comando:

ngrok authtoken <TOKEN DE AUTENTICAÇÃO>

Testando a aplicação ASP.NET Core

Para testar o ngrok com o ASP.NET Core disponibilizei uma aplicação genérica baseada no .NET 6 e voltada ao monitoramento/recebimento de dados de Webhooks no GitHub:

https://github.com/renatogroffe/ASPNETCore6-REST_API-Logging-MonitoramentoWebhooks

Estamos falando basicamente de uma API REST com um Controller simples para recebimento dos dados via POST, com o logging dos dados que chegam e a possibilidade ainda de se consultar o último evento processado:

Com a instrução a seguir executaremos a aplicação na porta 5000:

dotnet run urls=http://localhost:5000

Associaremos então esta porta ao ngrok com o comando:

ngrok http http://localhost:5000

Em Forwarding teremos o endereço gerado pelo ngrok para o acesso à aplicação local a partir da Internet:

Clique nesta imagem para visualizar com uma melhor resolução

Podemos utilizar este endereço para configurar o campo Payload URL de um repositório, como no exemplo a seguir:

https://6500-2804-431-e7c1-d1b4-88f8-55bb-7fba-338c.ngrok.io/webhookmonitor

Enviando todos dados de todos os eventos de um repositório no formato JSON, como indicado na próxima imagem (opção Send me everything):

Após estes ajustes um primeiro evento será recebido pela Web App:

E na próxima animação temos um exemplo de que o GitHub está se comunicando com nossa aplicação executada localmente, com o envio dos dados de uma nova issue aberta no repositório:

Clique nesta imagem para visualizar com uma melhor resolução

O log para este exemplo no Windows Terminal mostrará que o evento foi devidamente processado:

Podemos também acessar o Swagger para esta API REST via browser, simulando um acesso externo:

https://6500-2804-431-e7c1-d1b4-88f8-55bb-7fba-338c.ngrok.io/swagger/index.html

O comportamento aqui será o mesmo de uma aplicação hospedada em uma solução na nuvem:

Clique nesta imagem para visualizar com uma melhor resolução

Um detalhe interessante é que o ngrok também disponibiliza uma web interface, disponível em:

http://127.0.0.1:4040

Permitindo assim que se analisem as requisições HTTP processadas pela aplicação que foi exposta:

--

--

Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker