diff --git a/Emby.Dlna/Main/DlnaEntryPoint.cs b/Emby.Dlna/Main/DlnaEntryPoint.cs
index 2a535d5565..15021c19d6 100644
--- a/Emby.Dlna/Main/DlnaEntryPoint.cs
+++ b/Emby.Dlna/Main/DlnaEntryPoint.cs
@@ -313,7 +313,7 @@ namespace Emby.Dlna.Main
_logger.LogInformation("Registering publisher for {ResourceName} on {DeviceAddress}", fullService, address);
- var uri = new UriBuilder(_appHost.GetApiUrlForLocalAccess(false) + descriptorUri);
+ var uri = new UriBuilder(_appHost.GetApiUrlForLocalAccess(address, false) + descriptorUri);
var device = new SsdpRootDevice
{
diff --git a/Emby.Server.Implementations/ApplicationHost.cs b/Emby.Server.Implementations/ApplicationHost.cs
index 82294644b8..f3aaef0778 100644
--- a/Emby.Server.Implementations/ApplicationHost.cs
+++ b/Emby.Server.Implementations/ApplicationHost.cs
@@ -1114,13 +1114,13 @@ namespace Emby.Server.Implementations
}
///
- public string GetApiUrlForLocalAccess(bool allowHttps = true)
+ public string GetApiUrlForLocalAccess(IPObject hostname = null, bool allowHttps = true)
{
// With an empty source, the port will be null
- string smart = NetManager.GetBindInterface(string.Empty, out _);
+ var smart = NetManager.GetBindInterface(hostname ?? IPHost.None, out _);
var scheme = !allowHttps ? Uri.UriSchemeHttp : null;
int? port = !allowHttps ? HttpPort : null;
- return GetLocalApiUrl(smart.Trim('/'), scheme, port);
+ return GetLocalApiUrl(smart, scheme, port);
}
///
@@ -1134,11 +1134,13 @@ namespace Emby.Server.Implementations
// NOTE: If no BaseUrl is set then UriBuilder appends a trailing slash, but if there is no BaseUrl it does
// not. For consistency, always trim the trailing slash.
+ scheme ??= ListenWithHttps ? Uri.UriSchemeHttps : Uri.UriSchemeHttp;
+ var isHttps = scheme == Uri.UriSchemeHttps;
return new UriBuilder
{
- Scheme = scheme ?? (ListenWithHttps ? Uri.UriSchemeHttps : Uri.UriSchemeHttp),
+ Scheme = scheme,
Host = hostname,
- Port = port ?? (ListenWithHttps ? HttpsPort : HttpPort),
+ Port = port ?? (isHttps ? HttpsPort : HttpPort),
Path = ConfigurationManager.GetNetworkConfiguration().BaseUrl
}.ToString().TrimEnd('/');
}
diff --git a/MediaBrowser.Controller/IServerApplicationHost.cs b/MediaBrowser.Controller/IServerApplicationHost.cs
index 75ec5f213f..11afdc4aed 100644
--- a/MediaBrowser.Controller/IServerApplicationHost.cs
+++ b/MediaBrowser.Controller/IServerApplicationHost.cs
@@ -4,6 +4,7 @@
using System.Net;
using MediaBrowser.Common;
+using MediaBrowser.Common.Net;
using MediaBrowser.Model.System;
using Microsoft.AspNetCore.Http;
@@ -74,9 +75,10 @@ namespace MediaBrowser.Controller
///
/// Gets an URL that can be used to access the API over LAN.
///
+ /// An optional hostname to use.
/// A value indicating whether to allow HTTPS.
/// The API URL.
- string GetApiUrlForLocalAccess(bool allowHttps = true);
+ string GetApiUrlForLocalAccess(IPObject hostname = null, bool allowHttps = true);
///
/// Gets a local (LAN) URL that can be used to access the API.