“Bad Request - Invalid Hostname”的解决办法

最近在做一个微信端的应用,除了在本地测试之外,有时候还需要在手机上进行测试。

假设我的手机和PC在同一内网内,PC的IP是192.168.1.2,Website的端口是12345

我的第一反应是,我应该在手机上通过http://192.168.1.2:12345来访问我的站点。

然而,我得到了这样一个错误:

Bad Request - Invalid Hostname
------------------------------------------------
HTTP Error 400. The request hostname is invalid.

方法很简单,Visual Studio 2015的项目目录中会有一个.vs的文件夹,打开.vs\config\applicationhost.config,找到目标站点的配置节点,例如:

<site name="Demo.Website" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="D:\Projects\Demo\Demo.Website" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:52945:localhost" />
        <binding protocol="http" bindingInformation="*:52945:*" /> <!-- 加上这一行 -->
    </bindings>
</site>

网上大部分教程基本就说了这么多,然而我在这样配置了之后依然有问题。甚至有些教程是直接把localhost改成了*,也可以理解。然而,我每次这么做之后,重新启动站点的时候,总是会自动重新生成一个节点,那个里面配置的是localhost。纠结了一下午。

最后发现是权限的问题,如果想配置非localhost的绑定,VS必须以管理员权限运行才行。这样如果只配置了非localhost的绑定,就不会新建了,或者配置多条绑定也可以生效了。

遇到这个问题一直解决不了的朋友可以参考下。

另外如果站点甚至无法访问的话,可以新建一条防火墙入站规则,把端口号配置进去。