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

47
我正在尝试使用.NET编写WEB API,并尝试让我的Android应用程序从SQL Server数据库查询一些数据。
我已经编写了Web API,调试模式下可以正常运行。
我的问题是,我注意到该应用程序的URL为“ localhost:port ”,在此URL下运行良好。但是,当我尝试将其更改为“ MYIP:port(例如http:192.168.X.1234)”或“ MYHOSTNAME:port(例如win7home:1234)”,就会出现“ Bad Request - Invalid Hostname”错误。
我知道我可以将其部署到IIS上,而我的IIS也已设置好了,但我只是想知道为什么调试模式下无法运行?
是否有一种方法可以在调试模式下运行它并同时在我的Android设备上进行测试,而不必每次都部署它以进行更改?
6个回答

51

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

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

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

更改

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

更改后还需要重新启动IIS Express。


8
根据这里所述,从Visual Studio 2015开始,配置文件是针对每个项目的,并存储在 /{project folder}/.vs/config/applicationhost.config - Matthias

22

Anton和Matthew的回答都指引了我正确的方向。

于是我做了以下步骤:

  1. 以管理员权限运行Visual Studios

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

    但之后,我遇到了服务不可用(503)的错误

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

然后它在我的电脑浏览器和手机上都可以使用。

我不太确定为什么需要第三步——我的假设是(本地主机url用于VS指向,ip url用于从另一台机器访问)。


谢谢!我只想补充一点,你需要重新启动IIS Express才能使更改生效。最简单的方法是右键单击IIS Express图标,然后点击退出。该图标将消失,因此无法通过该方式重新启动。相反,只需从Visual Studio启动Web应用程序的调试会话即可重新启动IIS。作为奖励,你可以通过右键单击IIS图标,在“查看站点”下找到你的Web应用程序,然后查看现在可以访问你应用程序的IP地址。它应该在那里显示你所做的绑定更改。 - strangeluck
我在使用自托管Web API时偶然发现了这个问题。在https://dev59.com/T2Qn5IYBdhLWcg3wr406上有更多相关信息。 - Jedidja
2
IIS(不是IIS Express)怎么样? - Kira
1
@HediNaily 在 iis7 及以上版本中,您需要打开 IIS 管理工具,然后右键单击网站并转到“编辑绑定”。 - Matthew
我尝试过这个,但每次我尝试编辑我的解决方案的applicationhost.config文件时,都会出现“无法连接到Web服务器:IIS Express”的错误。唯一能解决它的方法是删除.config文件并让VS创建另一个,但这样我就失去了我的绑定。 - Hank
显示剩余2条评论

7
在您的解决方案目录中,打开文件 .vs\config\applicationHost.config,并修改以下行:
 <binding protocol="http" bindingInformation="*:1234:localhost" />

to

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

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


7

并且你必须使用 IIS Express。 - Anton
请务必注意您的计算机安全,不要忘记保护好自己的设备。上述文章帮助我节省了很多时间,因为我没有注意到安全策略。 - Anton
尝试过这个。我收到了一个错误,说“无法连接到Web服务器IIS Express”。当我改回本地主机时就没问题了。 - MoKG

3

我一直在寻找解决方案,最终为那些需要调试控制台应用程序(launch: project)的人找到了一个解决方案。

在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>();
                });

我在网上找不到这个内容,但在我以前某个工程项目中找到了它,那时它是可用的。


如果您没有使用IIS,那么这就是正确的答案。在运行时,Windows会确认您是否允许该进程绑定到端口-这可能是问题的根本原因。 - Bryn Lewis

0

在使用Visual Studio Code进行调试时,我遇到了同样的问题,解决方法是添加以下内容:

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

.. 到 launch.json

显然,默认情况下它将http协议绑定到“localhost:5000”,因此它可以与localhost一起使用,但不能与ip地址一起使用。

如果您正在尝试通过来自不同计算机的请求击中断点,请不要忘记检查防火墙设置(和/或杀毒软件)

希望这有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接