技术, .NET, ASP.NET

“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的绑定,就不会新建了,或者配置多条绑定也可以生效了。

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

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

您已成功订阅 HADB.ME
真棒!下一步,完成结账以便解锁 HADB.ME
欢迎回来!您已登录成功。
登录失败,请重试。
操作成功!您的账户已全面激活,现在您有所有内容的权限了。
错误!Stripe 结账失败。
成功!您的账单信息已更新。
错误!账单信息更新失败。