无法使用 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的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 HttpClient 在 Web api 中传递标头值