如何将winforms .NET 6应用程序托管到局域网

llew8vvj  于 2022-11-16  发布在  .NET
关注(0)|答案(1)|浏览(120)

我准备了WinForms应用程序并将其迁移到.NET 6,然后按照此问题的答案进行操作:Hosting ASP.NET Core API in a Windows Forms Application
如何更改应用程序以允许从LAN网络中的设备连接到API?
我试过这样的方法:

var host = CreateWebHostBuilder(args)
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseUrls("http://localhost:5000", "http://aError:5000", "http://0.0.0.0:6000")
    .UseIISIntegration()
    .UseStartup<Startup>()
    .Build();

但我仍然可以从我的PC连接到本地主机,aError不工作。

yx2lnoni

yx2lnoni1#

我找到的解决方案是:

string localIP = LocalIPAddress();

var host = CreateWebHostBuilder(args)
    .UseContentRoot(Directory.GetCurrentDirectory())
    .UseUrls("http://localhost:5000", $"http://{localIP}:5000")
    .UseIISIntegration()
    .UseStartup<Startup>()              
    .Build();

static string LocalIPAddress()
{
    using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, 0))
    {
        socket.Connect("8.8.8.8", 65530);
        IPEndPoint? endPoint = socket.LocalEndPoint as IPEndPoint;
        if (endPoint != null)
        {
            return endPoint.Address.ToString();
        }
        else
        {
            return "127.0.0.1";
        }
    }
}

而在IP上从这个静态的方法,我可以从局域网中的所有设备访问API;)

相关问题