本地测试子域名

6
我想在一个asp.net网站中测试一些子域名功能。我读到只需要编辑hosts文件并添加127.0.0.1 subdomain.domain.com,就可以实现。但我的似乎不行。我已经刷新了DNS,重启了计算机,尝试了新的浏览器,仍然出现500错误。当我从Visual Studio正常运行asp.net网站时,它会转到http://localhost:17365/。我该如何获取它的IP地址?我猜我没有完全理解整个情况,缺少一些要素。我运行了netstat -n,发现该站点正在[::1]:17365上运行,也许这就是为什么它在ipv4下无法工作的原因?

你看过 Dns.GetHostAddresses 吗? - MethodMan
你可以尝试类似这样的代码,但个人建议使用真实地址,例如在这个例子中尝试 www.google.comforeach (IPAddress address in Dns.GetHostAddresses("www.google.com")) { Console.WriteLine(address.ToString()); } - MethodMan
10个回答

6
解决方案非常简单。在您编辑了host文件并添加了以下一行后: 127.0.0.1 subdomain.domain.com 运行您的网站,个人网站启动,并在您的浏览器中显示此内容: http://localhost:[端口号]/ (例如:http://localhost:17365/) 只需将其更改为 http://subdomain.domain.com:[端口号]/(例如:http://subdomain.domain.com:17365/) 手动在浏览器的地址栏中输入它,它就会工作。

3
我收到了“错误请求 - 无效主机名”的提示。HTTP错误400。请求的主机名无效。我输入了127.0.0.1 test.domain.com,然后访问了http://test.domain.com:17365/。 - Zach
@Zach对我有用!我之前测试过,现在也是。请注意,每次启动调试和个人Web服务器时,号码都会更改!请放置新号码。 - Aristos
1
是的,我的设置肯定有问题。我认为问题出在127.0.0.1上。我试图访问127.0.0.1:17365,但显示“错误请求-无效主机名”。 - Zach

5
在Visual Studio中,当您要运行网站时,请先更改网站属性 > 使用动态端口False,然后将端口号设置为80,最后运行它。 默认情况下,它将启动http://localhost:80,但是如果在浏览器中访问subdomain.domain.com,它将指向您的网站调试实例(假设您仍然在主机文件中拥有127.0.0.1 subdomain.domain.com)。

你将使用动态端口设置为false了吗? - Ryan McDonough
即使将项目设置为使用默认 Web 服务器,我仍然没有看到该选项。 - Zach
请查看以下链接:http://i.stack.imgur.com/tcURT.png,从Scott的回答中了解如何设置端口。请使用VS Dev服务器而不是IIS。 - Ryan McDonough
谢谢Ryan。我不确定从星期五起发生了什么变化,但现在当我测试这个解决方案时它可以工作了。 - Zach
当我执行request.url时,它只会拉取localhost。有没有办法让它拉取子域名.localhost? - Zach
显示剩余2条评论

2

我只需进入 项目属性 > Web 然后在 Servers 下,选择 使用本地 IIS Web 服务器 并将 项目 URL 设置为 subdomain.domain.com

输入图像说明


那可能行得通,只是当我测试多个子域时会增加更多的步骤。 - Zach
取决于您所说的测试是什么意思。如果您指的是调试,则是的。但是,如果您只是指视觉和功能方面,您甚至不需要使用Visual Studio来查看您的站点。由于您更改了主机文件,因此您可以打开任何浏览器并导航到“subdomain.domain.com”,只要您在IIS中设置了它,它就会拉起您的站点。 - Code Maverick
我尝试过了,但是它显示“无法创建虚拟目录。无法创建网站'http://sub.domain.com'。您必须指定服务器名称为“localhost”。 - Zach
这是因为您需要进入IIS并首先在其中添加网站。您之前没有这样做过吗?您运行哪个版本的IIS? - Code Maverick
我从来没有安装过IIS,所以只是使用了IIS Express。我刚刚安装了IIS 8,并考虑将该网站添加到其中。 - Zach

2

0

打开applicationhost.config文件,你可以在Windows托盘中找到。 在IIS中查找当前正在运行的项目的application.config

现在找到

<webLimits>
......
<sites>
.....
<site name="[YourProjectName]" id="[YourProjectID]">
                <application path="/" applicationPool="Clr4IntegratedAppPool">
                    <virtualDirectory path="/" physicalPath="[Your Project Path]" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:50569:[Remove localhost from here]" />
                </bindings>
            </site>
.....
</sites>
......
<webLimits />

从绑定信息中删除 localhost。

最后,以管理员身份运行 VisualStudio。


0

你必须配置你的网络服务器。 好的,你改变了hosts文件。你的系统(dns)知道该去哪里(127.0.0.1)和主机一起。 但是你的网络服务器仍然不知道子域名.domain.com,并且与之无任何关联。


0

当您在Visual Studio中正常启动asp.net站点时,它会使用Cassini Web服务器。我不确定是否可以为Cassini配置绑定。

我的建议是在IIS中配置一个网站或虚拟目录,并将其绑定到subdomain.domain.com,这里有关于如何执行此操作的说明:Add a binding to a site

您的hosts文件应包含以下内容:

127.0.0.1    subdomain.domain.com

subdomain.domain.com的请求将被重定向到您的本地IIS Web服务器(端口80),因为绑定配置使IIS知道在哪里查找您的网站。

在Visual Studio中的Web项目属性中,您可以在Web选项卡中配置使用本地IIS Web服务器。


在Web配置文件中,它被设置为使用本地ISS Web服务器。使用ISS Express选中了项目URL:http://localhost:17365/。 - Zach

0

我不确定Visual Studio开发服务器是否可以处理除localhost以外的绑定。我认为你唯一能改变的是端口号。

你有几个选择:

1)安装IIS Express(或完整版IIS,如果你想要),并配置Visual Studio指向你在其中设置的站点。你可以手动设置你的绑定到subdomain.domain.com,它非常灵活。看一下这个答案:使用自定义域名与IIS Express

2)安装一个端口转发器,比如rinetd(如果你在hosts文件中有条目,我认为这应该可以工作)。你应该能够将subdomain.domain.com:<some port number>映射到localhost:17365。请注意,rinetd不会检测你正在使用的域名(只会检测底层IP地址,即127.0.0.1),因此最好为你正在处理的每个项目使用不同的端口。


0

我正在使用VS 2017和Webforms(不要说它)。

  1. 在解决方案(.sln)文件中(在记事本中),我将端口更改为8080。这可以在多个属性中找到,包括VWDPort、Debug.AspNetCompiler.VirtualPath、Debug.AspNetCompiler.TargetPath、Release.AspNetCompiler.VirtualPath和Release.AspNetCompiler.TargetPath。
  2. 在applicationhost.config文件中,我添加了:
<binding protocol="http" bindingInformation="*:8080:subdomain.domain" />

同样可以在记事本中完成。确保此文件中没有重复或旧条目绑定到任何位置。在第一步更改端口后,您可能会获得一个带有旧绑定的自动生成的重复条目。此外,请确保编辑正确的applicationhost.config文件。根据您的VS版本,此文件位于不同的位置。

  1. 在Powershell中运行:"netsh http add urlacl url=http://subdomain.domain:80/ user=everyone"
  2. 在您的hosts文件中(我的在C:\Windows\System32\drivers\etc),将"127.0.0.1 subdomain.domain"添加到您的主机列表中。您必须是管理员(右键单击记事本,以管理员身份运行)
  3. 以管理员身份运行VS。这将使端口保持为80。如果不以管理员身份运行,则会获得随机端口号,您的.sln文件将被自动编辑为此号码,并且您将在applicationhost.config中获得重复绑定。

以管理员身份运行很麻烦,但这是我能够使端口不改变的唯一方法。此外,我尝试使用其他端口,例如VS随机分配的端口,但不断遇到来自IIS的503错误。


-1

使用这个代码,您可以获得IP地址列表。如果我添加了这段代码,它会解析为127.0.0.1。请确认这是否是您要寻找的内容,否则我将删除答案。

foreach (IPAddress address in Dns.GetHostAddresses("localhost"))
{
    Console.WriteLine(address.ToString());
}

我只得到一个返回值。::1 - Zach
我在我的电脑上尝试了一下,得到了本地主机值127.0.0.1。你需要有实际的地址才能解析,同时考虑查看HostFile - MethodMan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,