【问题标题】:Bad Request - Invalid Hostname with Asp.net WebAPI project in Visual Studio 2013错误请求 - Visual Studio 2013 中的 Asp.net WebAPI 项目的主机名无效
【发布时间】:2015-04-26 07:07:32
【问题描述】:

我在 Visual Studio Pro 2013 中运行一个非常基本的 webAPI 项目。它在我机器上的 localhost 上运行良好。然后我尝试从另一台机器转到浏览器并转到:57571,类似于我如何通过将服务器 ipaddress 后跟端口号来指向 rails 应用程序。然后我得到 错误的请求 - 无效的主机名 HTTP 错误 400。请求的主机名无效。

我还通过将两台 Windows 机器放入 azure 来复制这一点。一个运行visual studio pro 2013。我运行相同的应用程序,它在本地运行良好。然后,如果我尝试从另一个 VM 指向它(在同一个虚拟网络上,我也可以 ping 服务器 vm),我仍然会收到 Bad Request - Invalid Hostname HTTP Error 400. The request hostname is invalid.

请注意,我不关心自定义域,我只想能够使用 IP 地址从另一台机器上运行此应用程序。这可能吗? (如果有关于我做错了什么的任何想法?) 这是我尝试过的 Didnt work for me This also didnt make it work

我如何知道 Visual Studio 是以管理员身份运行的?

(我正在使用运行 Visual Studio 的 Windows Server 2012 R2。我关闭了两台机器上的防火墙)

【问题讨论】:

  • 在本地机器上,您可以使用计算机名而不是本地主机访问该站点吗? Visual Studio 通常不会以管理员身份运行,只需右键单击它并以管理员身份运行即可启动它,就像您运行其他任何东西一样。
  • 是的,我可以使用主机名而不是 localhost 运行它,但是在外部我得到了这个错误
  • 解决了这个问题,但我还是不太了解绑定协议
  • 最后的解决办法是什么?
  • 更新了答案(这是一个让我忘记的网络问题)

标签: asp.net visual-studio azure iis visual-studio-2013


【解决方案1】:

这是我如何让它工作的。

Visual Studio 2013 中转到 C:\users\yourusername\Documents\IISExpress\config\applicationhost.config

将以下行添加到 applicationhost.config 使其工作

<binding protocol="http" bindingInformation="*:53676:*" />

这不起作用

<binding protocol="http" bindingInformation="<clientsIPaddress>:53676:*" />

Vs2015 更新application.config 更改的确切位置如下所述。

VS 2015 的文件路径如下。

C:\Users\\{YourUsername}\Documents\Visual Studio 2015\Projects\\{ThisSolutionName}\\.vs\config\applicationhost.config 如丹尼尔所说。

我应该把它放在我的 application.config 的什么地方?

以下是 XML 文件中的父部分,您可以在其中找到绑定。

 <system.applicationHost>
           <sites>
              <site name="WebSite1" id="1" serverAutoStart="true">
                 <bindings>
                      <binding protocol="http" bindingInformation=":8080:localhost" />
               </bindings>
           </site>
      </sites>
 </system.applicationHost>

大约是第 161 行,用于一个未更改 applicationhost.config 中的任何内容的新项目。

我没有意识到的是,我认为客户端 IP 地址是什么,实际上并非如此。原因是我在 Azure 中有一个 VNet 到 VNet 连接,并且连接两个 IP 地址的网关重新分配了运行我的应用程序的网络上的客户端 IP 地址。因此,我必须查找它映射到的新 IP 地址才能不使用 *:port:* 策略

【讨论】:

  • 很高兴它帮助了@JohnHenckel。很多时候我质疑回答我自己的问题与删除它们,因为我认为有人遇到类似问题的几率是多少。很高兴看到其他人从中受益
  • 这不适用于 Visual Studio 2015。有任何更新吗?
  • 遗憾的是,我在 VS2013 和 2015 中使用相同的代码,它似乎对我有用。也许您运行不同版本的 IISExpress 并且 applicationhost.config 格式不同@EthanKeiser。此外,我通常先安装 2013,然后再安装 2015,所以我的 IISExpress 版本可能是你的版本。
  • 尝试以管理员身份运行 Visual Studio。即使在对 application.config 文件进行更改后,我也收到此错误。然而,当我以管理员身份运行 Visual Studio 时,我得到了我所期望的结果。
  • 这对我来说在 VS2017 中对 IIS Express 上的 Core Web 应用程序不起作用。然而,起作用的是相同的,但没有星号,即&lt;binding protocol="http" bindingInformation=":53676:" /&gt;,详见此处:stackoverflow.com/a/48900559/842238
【解决方案2】:

我无法发表评论,但想回答@EthanKeiser

Visual Studio 2015 为您需要根据接受的答案更新的每个解决方案都有一个单独的配置文件。该文件位于:

C:\Users\\{UserName}\Documents\Visual Studio 2015\Projects\\{SolutionName}\\.vs\config\applicationhost.config

【讨论】:

  • 我在这个单独的配置文件中找不到任何其他帮助或文档来源。感谢您指出这一点。
  • 您先生为我节省了很多时间。谢谢。
  • 对我不起作用。 Windows 10、VS15、IIS Express 服务 https(这可能是问题吗?)。遵循指示。更改 IIS 配置会导致它被自动覆盖,添加一个全新的部分“站点名称='mywebsite(x)'。在我启动网站时,'x' 作为渐进式 int 和旧的“localhost”地址。修改自VS15 (website properties) web > project url: "192.168.0.2:44324/"; 导致“无法启动 IIS Express web 服务器”。
【解决方案3】:

遇到同样的问题一个小时,在这里尝试了所有与此问题相关的方法,但解决的问题是以管理员身份运行 Visual Studio。否则我会不断收到Unable to connect to web server 'IIS Express' 错误,这会导致你走错路。

【讨论】:

  • 您能否提供有关您正在运行的版本和操作系统的任何详细信息?
  • @FrankVisaggio 在撰写此答案时,我使用的是最新的 Windows 10 Pro(常规,不是快速更新)和 Visual Studio 2019(通用版本,不是预览版)
【解决方案4】:

对我有帮助的另一件事是将127.0.0.1 添加到绑定中。

所以结果applicationhost.config 看起来像这样:

<bindings>
  <binding protocol="http"  bindingInformation="*:28066:" />
  <binding protocol="http"  bindingInformation="*:28066:localhost" />
  <binding protocol="http"  bindingInformation="*:28066:127.0.0.1" />
  <binding protocol="http"  bindingInformation="*:28066:sitename.com" />

  <binding protocol="https" bindingInformation="*:44302:" />
  <binding protocol="https" bindingInformation="*:44302:localhost" />
  <binding protocol="https" bindingInformation="*:44302:127.0.0.1" />
  <binding protocol="https" bindingInformation="*:44302:sitename.com" />
</bindings>

hosts文件是这样的:

127.0.0.1   localhost
127.0.0.1   sitename.com

在添加127.0.0.1 之前,可以在浏览器中像https://localhost:44302 一样导航,但https://sitename.com:44302 导致Bad Request

此外,如果您执行“热替换”,请确保您正在重置 IIS。您可以通过在 Visual Studio 中右键单击项目,选择Unload project,然后更改applicationhost.config,保存它,并在VS 中Reload project 来做到这一点。

顺便说一句,不要忘记为您的项目生成 SSL 证书。我不确定 Visual Studio 是否会为您做到这一点。

端口应在 4430044399 的范围内。

以下是生成 SSL 的方法:

  1. 以管理员身份打开 Visual Studio 开发者工具
  2. makecert -r -pe -n CN="dev.helpme.transwestern.com" -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localmachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12
  3. netsh http show sslcert ipport=0.0.0.0:44302(这一步需要获取appid)
  4. netsh http delete sslcert ipport=0.0.0.0:44302

现在,打开“管理计算机证书”,导航到个人并选择新创建的。您将需要“详细信息/指纹”。

  1. netsh http add sslcert ipport=0.0.0.0:44302 certhash=&lt;thumbprint&gt; appid={id from step 3}(包括括号{}

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 2016-10-20
    • 2015-08-17
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多