【问题标题】:Web API Self Host public IPWeb API 自托管公共 IP
【发布时间】:2017-11-17 04:10:07
【问题描述】:

我试图在不使用 DDNS 服务的情况下从任何地方访问我编写的 Web API 服务(目前托管在控制台应用程序中以方便使用)。我知道公共IP可能会改变,没关系。我将始终可以访问新的。我这样做只是为了好玩。

到目前为止,我做了以下事情:

  1. 我在路由器的 DHCP 中设置了一个静态 IP(本例中为 192.168.1.101);
  2. 添加了从 50000 端口到 50000 端口的端口转发(更容易确保我不会混淆周围的东西);
  3. 为防火墙上的 50000 端口添加了入站规则,并设置了“允许连接”;

服务设置为始终在地址 192.168.1.101:50000 上启动。 Cors 也设置为 CorsOptions.AllowAll

我的问题来了:当我使用 Postman 使用本地 IP 地址和端口向 API 发出请求时,一切都按预期工作。

但是,如果我尝试使用相同的端口访问公共 IP 地址,如下所示: public_ip:50000/ApiRoute 无论我从哪个设备(本地计算机或连接在同一网络或不同网络上的其他设备)发出请求,我都会超时;

公共 IP 地址的来源是 ifconfig.co 网站。

有谁知道为什么公共 IP 不起作用?老实说,我没有想法。

【问题讨论】:

  • 当您说“防火墙”时,您指的是路由器设置还是运行该服务的操作系统的防火墙?另外,您是否尝试过使用网络外部的公共 IP 访问服务(例如,使用您的手机(而不是 wifi))?
  • @itsme86 当我谈到防火墙时,我指的是 Windows 防火墙。我使用了未连接到家庭网络(移动数据)的 Android 平板电脑上的 REST 客户端,得到了相同的结果。我应该提到:)

标签: c# networking asp.net-web-api2 port portforwarding


【解决方案1】:

尝试在基本 URL 中添加一个星号 (*),以确保可以从任何 IP 地址访问 API,就像以下代码:

using Microsoft.Owin.Hosting;
using System;

namespace WebApiDocker
{
    class Program
    {
        static void Main(string[] args)
        {
            string baseAddress = "http://*:80/";

            using (WebApp.Start<Startup>(url: baseAddress))
            {
                Thread.Sleep(Timeout.Infinite);
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2022-01-27
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    相关资源
    最近更新 更多