Tunnel your local host address to a public URL
In this blog post, I will show you, on a Windows machine, how to tunnel your local host address to a public URL with ngrok.
In my case, I use ngrok to expose an ABP Framework back-and API localhost address to a public internet URL so that I can consume an ABP Framework API by a .NET MAUI mobile app running on my Android phone.
The problem is, that you need to copy the public URL generated by ngrok and replace the Authority URL in the appsettings.json file of the .NET MAUI Mobile app manually. This is very cumbersome and time-consuming.
So I automated the process by writing a batch-script that starts ngrok and also automatically replaces the Authority URL in the appsettings.json file of the .NET MAUI mobile app.
The script is called ngrok.bat
and is located at the project's root.
Although the script is written for an ABP Framework project with .NET MAUI mobile app, the same principle can be applied to many other projects too.
Step-by-step
Install and setup ngrok
Download and install ngrok
Get the ngrok on the ngrok official website.
Get an auth token
After you have downloaded and installed ngrok, you need to get an authtoken to use ngrok. You can get an authtoken by signing up on the ngrok website.
Go to the ngrok Sign up page and follow the instructions to get an authtoken.
Add authtoken to your ngrok.yml file
Run the following command to add your authtoken to your ngrok.yml file:
ngrok authtoken your-authtoken
Install jq
jq is a lightweight and flexible command-line JSON processor. You can use jq to parse JSON data in the terminal.
Get the jq on the jq official website and install it.
Copy the ngrok.bat script to the root of the ABP Framework project
@echo off
set targetFile="C:\<your-path-to-the-maui-mobile-aap-appsettings-file-here>\appsettings.json"
set apiLocalhostPortNumber=<api-port-number-here>
setlocal disabledelayedexpansion
start ngrok.exe http https://localhost:%apiLocalhostPortNumber%/
timeout 5 > NUL
if not exist "C:\TEMP_NGROK\" mkdir "C:\TEMP_NGROK\"
for /F %%I in ('curl -s http://127.0.0.1:4040/api/tunnels ^| jq -r .tunnels[0].public_url') do set ngrokTunnel=%%I
echo ngroktunnel: %ngrokTunnel%
echo %ngrokTunnel%/.well-known/openid-configuration
for /f "tokens=1* delis=]" %%a in ('find /n /v "" %targetFile%') do (
echo %%b|finds /rc:"\ *\"AuthorityUrl\".*\:\ \".*\"" >nul && (
for /f "delis=:" %%c in ("%%b") do echo %%c: "%ngrokTunnel%",
) || echo/%%b
)>>C:\TEMP_NGROK\temp.json 2>nul
for %%I in (C:\TEMP_NGROK\temp.json) do for /f "delis=, tokens=* skip=1" %%x in (%%I) do echo %%x >> "%%I.new"
move /Y "C:\TEMP_NGROK\temp.json.new" %targetFile% > nul
del C:\TEMP_NGROK\temp.json
rmdir /s /q "C:\TEMP_NGROK\"
Start the ABP Framework back-end API
Start the batch-script
Open a terminal in the root of the ABP Framework project and run the following command:
ngrok.exe
When you run the script, ngrok will tunnel your localhost address to a public URL,
and will replace the Authority URL in the appsettings.json file of the .NET MAUI Mobile app with the public URL generated by ngrok.
Enjoy and happy coding!
Comments
Mark0Carlson 10 weeks ago
Yeah it can be a real headache, I tried LongPath Tool Program which helped a lot.
Mark0Carlson 10 weeks ago
Hi, it really did my my head this path thing, but I found a way, I tried LongPath Tool Program and that sorted it.