Microsoft Owin Hosting 只能从本地主机访问 - 从公共 ip 无法访问

问题描述 投票:0回答:0

我正在使用 aws Windows Server 2022 Datacenter build 21H2。尝试使用 webapi 托管 owin。

我的电脑操作系统是windows 10

.net 框架 4.8

webapi 只能从 localhost:port/endpoint 访问。无法使用机器名访问本地机器:端口/端点。

我有公网IP,公网IP也无法在本地机器和外网访问。完全关闭防火墙,我用示例 tomcat 应用程序和简单的 flask 应用程序测试相同的端口,这两个 java-tomcat 服务器和 flask 应用程序都可以从外部网络访问。

但是 .net owin self hosted 无法通过相同端口或外部网络的不同端口访问(我在使用相同端口之前关闭所有其他 Web 服务器)。所以这不是防火墙或端口问题,我相信与 aws 内部 vps 防火墙无关,因为简单的 flask 服务器可以从公共 ip 访问。

在我发布这个问题之前花了很多时间(将近两周)来解决这个问题并且看到了几乎所有关于它的答案,但无法解决它。 回答 1, 回答

复制错误的完整代码

public class WebServerStartup
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            HttpConfiguration config = new HttpConfiguration();
            appBuilder.UseCors(CorsOptions.AllowAll);
            config.MapHttpAttributeRoutes(); //Don't miss this

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            ((Newtonsoft.Json.Serialization.DefaultContractResolver)config.Formatters.JsonFormatter.SerializerSettings.ContractResolver).IgnoreSerializableAttribute = true;
            appBuilder.UseWebApi(config);
        }
    }

只是一个点击托管的例子

 private void ButtonHost_OnClick(object sender, RoutedEventArgs e)
        {
            try
            {
             // CASE 1 Tried
                StartOptions options = new StartOptions();
                options.Urls.Add($"http://localhost:{txtProt.Text.Trim()}");
                options.Urls.Add($"http://127.0.0.1:{txtProt.Text.Trim()}");
                options.Urls.Add($"http://{Environment.MachineName}:{txtProt.Text.Trim()}" );


                WebApp.Start<WebServerStartup>(options: options);
                              
            }
            catch (Exception exception)
            {

                TextBlockStatus.Text = JsonConvert.SerializeObject(exception);
            }
        }

从管理员命令提示符添加 netsh http 添加 urlacl url=http://AMAZ-V5775TY37B:9989/ user=Administrator

本地主机:端口

机器名:端口

这在我的本地机器上运行良好。

//CASE 2 without StartOptions tried with  # working in local and aws, but not public ip
WebApp.Start<Startup>("http://*:8080");

//CASE 3 # working in local and aws
WebApp.Start<Startup>("http://localhost:8080");

//CASE 4 # working in localpc but not in aws
WebApp.Start<Startup>("http://localip:8080"); // 192.168.1.x 

在任何情况下,它都不适用于公共 ip,但具有相同端口的相同公共 ip 无需任何额外配置即可用于 flask 和 tomcat。

我是否错过了自己配置中的任何配置,我尝试以管理员身份运行应用程序,仍然是同样的错误;

错误:连接被拒绝

c# .net asp.net-web-api asp.net-web-api2 owin
© www.soinside.com 2019 - 2024. All rights reserved.