Remotely connect to .net core self hosted web api
You can simply do the following to create your WebHost, this will allow remote connections to kestrel.
var host = WebHost.CreateDefaultBuilder(args)
.UseUrls("http://0.0.0.0:80")
.UseStartup<Startup>()
.Build();
After using the following code I still wasn't able to access my API remotely, I had to disable the network adapters created by Docker in the windows control panel (Control Panel\Network and Internet\Network Connections)
In my case (.NET core 2.1) I had to modify the Properties/launchSettings.json
file.
Set the applicationUrl
to a list of allowed urls separated by semicolons like this
"applicationUrl": "https://localhost:5001;http://odin:5000"
Hope this helps someone out there.
My guess is that the issue isn't in your controller, it is in program.cs. You need to modify the construction of your WebHost
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseUrls("http://localhost:5000", "http://odin:5000", "http://192.168.1.2:5000")
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
Unless you add the UseUrls line, Kestrel isn't going to listen outside of localhost. This makes sense, because in a normal situation Kestrel will be sitting behind a reverse proxy like IIS or NGNIX and doesn't need to bind to external URLs.
The best way is to adjust the launchSettings.json
, which is located inside the Properties
folder.
Change
"applicationUrl": "https://localhost:5001"
to
"applicationUrl": "https://0.0.0.0:5001"
This allows the Kestrel Web Server to listen for traffic from all Network Interfaces.