89

我有一个在 VS2012 中开发的测试 ASP.NET MVC3 应用程序。当我开始调试应用程序时,通过请求从主机访问http://localhost:<portnumber>. 但是,如果我尝试通过 Intranet 中的远程计算机访问相同的应用程序,http://<ip>:<portnumber>我会得到HTTP error 400: Bad request. Invalid Host Name.,就它在 IIS Express 上运行而言,任何服务器配置都无法访问。

有没有办法解决这个问题?

4

10 回答 10

143

更新

我制作了一个更好地描述该过程的视频,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:将 asterix 删除。

然后确保您的防火墙允许该端口上的传入连接。您可能需要重新启动系统或至少重新启动 Visual Studio 才能让 IISExpress 重新加载配置文件。

如果这不起作用,请查看以下答案:https ://stackoverflow.com/a/5186680/985284

于 2013-03-21T03:13:34.980 回答
47

VisualStudio 2015 非管理员

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

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

    <binding protocol="http" bindingInformation=":44302:" />

    (其中 44302 是您的端口)


  1. 从管理员命令提示符:

    一世。启用非管理员绑定到端口

    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


  1. 从 VisualStudio 开始调试
于 2017-03-24T01:22:28.373 回答
22

除了修改 iisexpress 配置文件外,有时您还需要运行如下命令。

netsh http 添加 urlacl url=http://*:49419/ user=Everyone

于 2014-06-26T02:27:06.273 回答
15

如何避免以管理员身份运行 Visual Studio

使用Garret@shangkeyun 的答案,您可以连接到正在运行的网站,而无需以管理员用户身份运行 Visual Studio:

  1. 打开%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
  2. 使用搜索您的网站name=MySiteName
  3. 复制部分中的现有<binding>项目<bindings>。您现在应该有两行带有binding.
  4. 删除 bindingInformation 中的“localhost”部分。
  5. 它现在应该是这样的,假设端口是12345

    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:" />
    
  6. 启用非管理员绑定到端口

    netsh http add urlacl url=http://*:12345/ user=Everyone
    

编辑 2019:gregmac 添加了一个将 VS 实例列入白名单的步骤。我从来不需要这个,但无论如何都要列出它:

  1. netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=12345 dir=in action=allow
于 2016-03-09T12:47:45.653 回答
10

由于我无法在@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:" />

于 2015-05-18T15:42:58.567 回答
2

你们中的一些人可能会花费大量时间来修改和测试您的 %USERPROFILE% 目录。如果您在VS debug上运行,请使用 $(solutionDir).vs\config\applicationhost.config

于 2017-04-11T18:44:52.003 回答
1

感谢 byteit:

转到 Documents/IISExpress/config 中的 applicationhost.config

找到您正在处理的特定站点的条目:

添加:

<binding protocol="http" bindingInformation="*:<your site port>:*" />

在现有的面前

 <binding protocol="http" bindingInformation="*:<your site port>:localhost" />

要在不使用 VS2013 的情况下实现解决方案,请在重新启动时为您创建一个新的网站 xml 条目。您将需要以管理员身份运行。

于 2016-02-14T00:33:08.137 回答
1

完成上述配置后,我不得不在管理模式下运行 Visual Studio。

在此处输入图像描述

于 2017-04-05T05:04:07.243 回答
0

这对我有用:

  • 启动 IIS 管理器
  • 添加一个指向项目文件夹的新虚拟目录(C:\VSProjects在我的情况下)
  • 在 IIS 管理器中选择新的虚拟目录。从选项列表中选择Directory Browsing。右侧有一个Enable按钮。点击它。

现在我可以通过mypcname\VSProjects\myProj\outputBinViewer.

于 2014-12-17T18:48:58.773 回答
0

在Visual Studio Code中调试了一个非常相似的问题,我通过添加解决了它:

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

..启动.json

显然,默认情况下它将http协议绑定到'localhost:5000',因此它适用于localhost但不适用于ip地址- 既不是远程也不是本地。

如果您试图通过来自另一台计算机的请求来命中断点,请不要忘记检查您的防火墙设置(和/或防病毒)

希望这可以帮助

于 2018-03-17T18:28:56.307 回答