错误请求 - Visual Studio 2013 中 Asp.net WebAPI 项目的主机名无效

Bad Request - Invalid Hostname with Asp.net WebAPI project in Visual Studio 2013

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

我还通过将两台 windows 机器置于 azure 中来复制它。一个 运行ning visual studio pro 2013。我 运行 相同的应用程序,它在本地运行良好。然后,如果我尝试从另一个 VM 指向它(在同一个虚拟网络上,我也可以 ping 服务器虚拟机),我仍然会收到 Bad Request - Invalid Hostname HTTP Error 400。请求主机名无效。

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

我怎么知道 visual studio 是 运行 宁作为管理员?

(我正在使用 windows Server 2012 R2,其中 visual studio 是 运行ning。我关闭了两台机器上的防火墙)

这是我如何让它工作的。

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

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

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

这不起作用的地方

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

Vs2015 Update确切位置 此更改 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:* 策略

我不能发表评论,但想回答@EthanKeiser

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

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

另一件对我有帮助的事情是将 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

此外,如果您执行 'hot-replacement',请确保您正在重置 IIS。你可以通过右击Visual Studio中的项目,selecting 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

现在,打开 "Manage computer certificates",导航到新创建的个人和 select。您将需要 "Details/Thumbprint".

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

希望对您有所帮助。

同样的问题持续了一个小时,尝试了此处的所有内容以及与此问题相关的所有内容,但解决它的是 运行 Visual Studio 作为管理员。否则我会不断收到 Unable to connect to web server 'IIS Express' 错误,这会导致您误入歧途。

对于 VS2019 和 2022,您可能会在此文件夹中找到 applicationhost.config。格式似乎与上述答案相同。 ${projectRoot}/.vs/config/applicationhost.config.