我在VS2012中开发了一个测试ASP.NET MVC3应用程序。当我开始调试时,通过请求http://localhost:<portnumber>
从主机访问应用程序。但是,如果我尝试通过http://<ip>:<portnumber>
从内部网中的远程计算机访问相同的应用程序,我得到HTTP error 400: Bad request. Invalid Host Name.
只要它在IIS Express上运行,任何服务器配置都将无法访问。
有没有办法解决这个问题?
答案 0 :(得分:126)
<强>更新强>
我制作了一个更好地描述过程的视频,https://youtu.be/5ZqDuvTqQVs
如果您使用的是VS2013或更高版本,请确保以管理员身份运行它以使其正常工作。
<小时/> 打开
%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 Studios才能让IISExpress重新加载配置文件。
如果这不起作用,请查看以下答案:https://stackoverflow.com/a/5186680/985284
答案 1 :(得分:34)
在您的解决方案目录中,在文件.vs\config\applicationHost.config
中更改行
<binding protocol="http" bindingInformation="*:44302:localhost" />
到
<binding protocol="http" bindingInformation=":44302:" />
(其中44302是您的端口)
从管理员命令提示符:
我。启用非管理员绑定到端口
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
答案 2 :(得分:19)
除了修改iisexpress配置文件外,有时您还需要运行如下命令。
netsh http add urlacl url = http:// *:49419 / user = Everyone
答案 3 :(得分:10)
由于我无法在@Garret Fogerlie的帖子中添加评论,以及对评论者的回复&#39;问题(@ Y.Ecarri和@SamuelEdwinWard),我遵循Garret所建议的,使用Visual Studio 2013,在管理员模式下运行并更改application.config
文件。
在启动调试并看到我收到相同的错误消息后,我回到application.config
并看到我的网站的新条目已经创建,就像Y.Ecarri的问题一样。
所以我停止了调试,在Visual Studio中打开我的解决方案,并再次为新条目编辑application.config
文件。我也完全删除了*
sings和localhost
,所以我对新条目有以下内容:
<binding protocol="https" bindingInformation=":44300:" />
答案 4 :(得分:6)
如何避免以管理员身份运行Visual Studio
同时使用Garret's和@shangkeyun's answer,您可以实现与正在运行的网站的连接,而无需以管理员用户身份运行Visual Studio:
%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
name=MySiteName
<binding>
部分中的现有<bindings>
项。您现在应该有两行binding
。现在应该是这样的,假设端口是12345
:
<binding protocol="http" bindingInformation="*:12345:localhost" />
<binding protocol="http" bindingInformation="*:12345:" />
通过以管理员身份运行以下cmd来删除所有防火墙限制:
netsh http add urlacl url=http://*:49419/ user=Everyone
答案 5 :(得分:1)
感谢byteit:
转到Documents / IISExpress / config
中的applicationhost.config找到您正在处理的特定网站的条目:
添加:
<binding protocol="http" bindingInformation="*:<your site port>:*" />
在现有的
之前 <binding protocol="http" bindingInformation="*:<your site port>:localhost" />
要在没有VS2013的情况下实现解决方案,请在重新启动时为您创建新的网站xml条目。您需要以管理员身份运行。
答案 6 :(得分:1)
有些人可能会花费大量时间使用%USERPROFILE%目录进行修改和测试。如果您正在 VS debug 上运行,请使用$(solutionDir).vs \ config \ applicationhost.config
答案 7 :(得分:0)
这对我有用:
C:\VSProjects
)Directory Browsing
。在右侧有一个Enable
按钮。点击它。 现在,我可以通过mypcname\VSProjects\myProj\outputBinViewer
访问网络上的文件夹和项目箱。
答案 8 :(得分:0)
答案 9 :(得分:0)
如果在 Visual Studio Code 中调试一个非常类似的问题,我通过添加以下内容解决了这个问题:
"env": {
// ...
"ASPNETCORE_URLS": "http://*:5000" // change to the port you are using
// ...
},
..到 launch.json
显然,默认情况下它会将http协议绑定到“localhost:5000&#39;”,因此它可以与 localhost 配合使用,但不能与 ip address 配合使用 - 不能远程使用也不在当地。
如果您尝试通过来自其他计算机的请求来查找断点,请不要忘记检查防火墙设置(和/或防病毒)
希望这会有所帮助