无法使用 ip:port 访问 WEB API,但可以在 VS 调试模式下使用 localhost:port

Posted

技术标签:

【中文标题】无法使用 ip:port 访问 WEB API,但可以在 VS 调试模式下使用 localhost:port【英文标题】:Can't access WEB API with ip:port but can with localhost:port during VS debug mode 【发布时间】:2013-11-02 12:21:27 【问题描述】:

我正在尝试从 .net 编写一个 WEB API,并尝试让我的 android 应用程序从 sql server 数据库中查询一些数据。

我已经编写了 web api,它在调试模式下运行良好。

我的问题是我注意到该应用程序的 url 是 localhost:port 并且运行良好。 但是,当我尝试将其更改为 MYIP:port (eg. http:192.168.X.1234)MYHOSTNAME:port (eg win7home:1234) 时,这给了我 Bad Request - Invalid Hostname

我知道我可以将它部署到 IIS 并且我的 IIS 已设置,但我只是想知道它为什么不能在调试模式下工作???

有没有办法让我在调试模式下运行它并同时在我的 Android 上进行测试,而不是每次我想要进行更改时都必须部署它?

【问题讨论】:

【参考方案1】:

如果您在调试模式下运行它,我假设您使用的是 IIS-Express。

默认情况下,IIS-Express 只绑定到localhost

为避免这种情况,您可以打开位于:C:\Users\<username>\My Documents\IISExpress\config\applicationhost.config 的 IIS-Express 应用程序配置文件并修改站点的绑定信息。

改变

<binding protocol="http" bindingInformation="*:55284:localhost" />

<binding protocol="http" bindingInformation="*:55284:*" />

您还必须在更改后重新启动 IIS-Express。

【讨论】:

如 here 所述,从 Visual Studio 2015 开始,配置文件是每个项目并存储在 /project folder/.vs/config/applicationhost.config【参考方案2】:

安东和马修的回答都为我指明了正确的方向

这就是我所做的

    在管理员模式下运行 Visual Studios

    更改了绑定协议并按照建议允许传入方向 http://johan.driessen.se/posts/Accessing-an-IIS-Express-site-from-a-remote-computer

    但在那之后,我有一个服务不可用(503)错误

    所以我跟着这个: IIS Express Enable External Request - 503 只添加了端口协议和 port:ip 协议,

它可以在我机器的浏览器和手机上运行。

不太清楚为什么需要第 3 步 - 我的假设是(VS 需要 localhost url 来指向并且 ip url 用于从另一台机器访问)

【讨论】:

谢谢!我只想补充一点,您需要重新启动 IIS Express 才能进行更改。最简单的方法是右键单击 IIS Express 图标并单击退出。该图标将消失,因此您无法以这种方式重新启动它。相反,只需从 Visual Studio 启动 Web 应用程序的调试会话。它将重新启动 IIS。作为奖励,您可以通过右键单击 IIS 图标来确认所做的更改,在“查看站点”下找到您的 Web 应用程序,然后现在可以访问您的应用程序所在的 IP 地址。它应该在那里显示您的绑定更改。 我使用自托管 Web API 偶然发现了这个问题。 ***.com/questions/16642651/… 有更多相关信息 iis(不是iis express)呢? @HediNaily 在 iis7 及更高版本中,打开 IIS 管理器工具,然后右键单击该网站并转到 edit bindings 我试过这个,但每当我尝试为我的解决方案编辑 applicationhost.config 文件时,我都会收到“无法连接到 Web 服务器:IIS Express”。唯一解决它的方法是删除 .config 文件并让 vs 创建另一个,但随后我失去了绑定。【参考方案3】:

当我想共享我的本地主机 IIS 时,我遇到了同样的问题,因此有些人只需键入我的机器名称或 IP 并连接到我的 Web 应用程序实例。因此,如果这是您在http://johan.driessen.se/posts/Accessing-an-IIS-Express-site-from-a-remote-computer 时需要的。它适用于 Silverlight 和 MVC 应用程序。我什至设置了断点,它们被远程机器击中。

【讨论】:

你也用过 IIS Express 请不要忘记您机器上的安全性。上面的文章为我节省了很多时间,因为我没有注意安全策略 试过这个。我收到一条错误消息,提示“无法连接到 Web 服务器 IIS Express”。改回localhost就好了【参考方案4】:

在您的解决方案目录中,在文件 .vs\config\applicationHost.config 中更改行

 <binding protocol="http" bindingInformation="*:1234:localhost" />

<binding protocol="http" bindingInformation=":1234:192.168.1.35" />

并以管理员身份运行 Visual Studio。重新启动 IIS Express。这个解决方案对我有用。

【讨论】:

【参考方案5】:

Visual Studio Code 中调试时遇到同样的问题,我通过添加解决了它:

"env": 
      // ...
      "ASPNETCORE_URLS": "http://*:5000" // change to the port you are using
      // ...
,

.. 到 launch.json

显然,默认情况下它将http协议绑定到'localhost:5000',因此它适用于localhost,但不适用于ip地址

如果您尝试通过来自其他计算机的请求来触发断点,请不要忘记检查您的防火墙设置(和/或防病毒)

希望对你有帮助

【讨论】:

【参考方案6】:

我一直在寻找这个,终于为调试控制台应用程序的人找到了一个解决方案(启动:项目)。

您必须在 Program.cs 类中添加 UseUrls()

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                
                    webBuilder
                       .UseUrls("http://0.0.0.0:5000", "https://0.0.0.0:5001")
                       .UseStartup<Startup>();
                );

我无法在网上的任何地方找到它,但我在某个旧项目中找到了它。

【讨论】:

以上是关于无法使用 ip:port 访问 WEB API,但可以在 VS 调试模式下使用 localhost:port的主要内容,如果未能解决你的问题,请参考以下文章

无法在 MVC 项目中访问 Web API 2 控制器

仍登录 MVC 站点,但无法调用 Web API

web项目tomcat启动url自定义(去掉项目名)

如何使用 HttpClient 在 Web api 中传递标头值

无法验证从 Azure AD 获得的访问令牌签名以保护 Web API

解决 Nginx 部署,无法访问 Swagger 文档的问题