错误请求 - 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 是否会为您做到这一点。
端口应在 44300 到 44399.
范围内
生成 SSL 的方法如下:
- 以管理员身份打开 Visual Studio 开发人员工具
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
netsh http show sslcert ipport=0.0.0.0:44302
(您需要从这一步获取appid)
netsh http delete sslcert ipport=0.0.0.0:44302
现在,打开 "Manage computer certificates",导航到新创建的个人和 select。您将需要 "Details/Thumbprint".
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
.
我正在 运行在 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 是否会为您做到这一点。
端口应在 44300 到 44399.
范围内生成 SSL 的方法如下:
- 以管理员身份打开 Visual Studio 开发人员工具
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
netsh http show sslcert ipport=0.0.0.0:44302
(您需要从这一步获取appid)netsh http delete sslcert ipport=0.0.0.0:44302
现在,打开 "Manage computer certificates",导航到新创建的个人和 select。您将需要 "Details/Thumbprint".
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
.