我有一个在VS2012中开发的测试ASP.NET MVC3应用程序。当我开始调试应用程序时,通过对http://localhost:<portnumber>
的请求,可以从主机访问该应用程序。但是,如果我尝试通过内部网络的远程计算机访问相同的应用程序,使用http://<ip>:<portnumber>
,我会收到HTTP错误400:错误的请求。无效的主机名。
由于它运行在IIS Express上,所以任何服务器配置都无法访问。
有没有解决这个问题的方法?
我有一个在VS2012中开发的测试ASP.NET MVC3应用程序。当我开始调试应用程序时,通过对http://localhost:<portnumber>
的请求,可以从主机访问该应用程序。但是,如果我尝试通过内部网络的远程计算机访问相同的应用程序,使用http://<ip>:<portnumber>
,我会收到HTTP错误400:错误的请求。无效的主机名。
由于它运行在IIS Express上,所以任何服务器配置都无法访问。
有没有解决这个问题的方法?
更新
我制作了一个视频,更好地描述了这个过程:https://youtu.be/5ZqDuvTqQVs
如果你正在使用Visual Studio 2013或更高版本,请确保以管理员身份运行它才能使它工作。
%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
文件(在VS2015中可能是$(solutionDir)\.vs\config\applicationhost.config
)。你应该会看到类似这样的内容:<site name="WebSite1" id="1" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:8080:localhost" />
</bindings>
</site>
将bindingInformation=":8080:localhost"
更改为bindingInformation="*:8080:*"
(端口号8080可能不同)。
注意: 如果不起作用,请尝试使用bindingInformation="*:8080:
星号可以被删除。
然后确保您的防火墙允许该端口的入站连接。您可能需要重新启动系统或至少重启Visual Studio以使IISExpress重新加载配置文件。
如果这样不起作用,请参阅此答案:https://dev59.com/VW445IYBdhLWcg3wws4u#5186680
<site name="Website1(1)" id="2" serverAutoStart="true">
),但我仍无法从另一台计算机访问该网站。 - Yván EcarribindingInformation="*:8080:*"
对我没有起作用,结果出现了 @Y.Ecarri 经历的问题。最终有效的方法是去掉星号:bindingInformation=":8080:"
。这让我非常疯狂,希望能帮助到其他人。 - Drazen BjelovukbindingInformation=":8080:"
(不带 *) - Matthieu Charbonnier在解决方案目录中,打开文件.vs\config\applicationHost.config
,将以下行
<binding protocol="http" bindingInformation="*:44302:localhost" />
更改为
<binding protocol="http" bindingInformation=":44302:" />
(其中44302为端口号)
使用管理员身份打开命令提示符:
i. 允许非管理员绑定端口
netsh http add urlacl url=http://*:44302/ user=Everyone
ii. 允许通过防火墙
netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=44302 dir=in action=allow
除了修改iisexpress配置文件之外,有时您还需要运行以下命令。
netsh http add urlacl url=http://*:49419/ user=Everyone
如何避免以管理员身份运行Visual Studio
通过使用Garret的答案和@shangkeyun的答案,您可以连接到正在运行的网站,而无需以管理员用户身份运行Visual Studio:
%USERPROFILE%\我的文档\IISExpress\config\applicationhost.config
name=MySiteName
搜索您的网站<bindings>
节中复制现有的<binding>
项。现在应该有两行binding
。如果端口是12345
,则现在应该看起来像这样:
<binding protocol="http" bindingInformation="*:12345:localhost" />
<binding protocol="http" bindingInformation="*:12345:" />
允许非管理员绑定端口
netsh http add urlacl url=http://*:12345/ user=Everyone
编辑于2019年:gregmac添加了一步骤,以将VS实例列入白名单。我从未需要过这个步骤,但还是把它列出来:
netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=12345 dir=in action=allow
由于我无法在@Garret Fogerlie的帖子中添加评论,并针对评论者的问题(@Y.Ecarri和@SamuelEdwinWard),我按照Garret的建议使用Visual Studio 2013以管理员模式运行它,并更改了application.config
文件。
在启动调试并看到我收到相同错误消息后,我回到了application.config
,发现为我的站点创建了一个新条目,就像Y.Ecarri的问题一样。
因此,我停止了调试,保持我的解决方案在Visual Studio中打开,并再次编辑了新条目的application.config
文件。 我还简单地删除了*
符号和localhost
,所以我为新条目拥有以下内容:
<binding protocol="https" bindingInformation=":44300:" />
有些人可能会花费很多时间来修改和测试他们的 %USERPROFILE% 目录。如果您正在运行 VS debug,请使用 $(solutionDir).vs\config\applicationhost.config。
<binding protocol="http" bindingInformation="*:<your site port>:*" />
<binding protocol="http" bindingInformation="*:<your site port>:localhost" />
在使用Visual Studio Code进行调试时,我遇到了非常相似的问题,解决方法是添加以下内容:
"env": {
// ...
"ASPNETCORE_URLS": "http://*:5000" // change to the port you are using
// ...
},
.. 到 launch.json
默认情况下,它将http协议绑定到“localhost:5000”,因此它可以在本地使用localhost,但不能使用IP地址 - 无论是远程还是本地。
如果您正在尝试通过来自另一台计算机的请求触发断点,请不要忘记检查防火墙设置(和/或杀毒软件)
希望这可以帮到你
这是对我有效的方法:
C:\VSProjects
)目录浏览
。右侧有一个启用
按钮。点击它。现在我可以通过mypcname\VSProjects\myProj\outputBinViewer
访问我的文件夹和项目bin文件。