如何在开发机器上测试子域? abc.localhost

时间:2009-05-16 17:36:43

标签: asp.net windows iis

我正在尝试开发一个包含多个子域的asp.net站点。我是网站的新手,特别是asp.net。但是,看起来通配符子域是使用dns条目和Web服务器配置的组合正确设置的 - 这在我的开发机器上不会发生。因此,我在Windows 主机文件

中手动插入条目
127.0.0.1  localhost
127.0.0.1  abc.localhost
127.0.0.1  xyz.localhost

但是,当我尝试询问 Request.Url 属性时,没有可见的子域。例如,如果我在浏览器中点击http://abc.localhost:1660/,我会从http://localhost:1660/获得Request.Uri.ToString(); abc刚刚消失了?!

我不知道为什么hosts文件的工作方式是这样的,但是我可以使用其他方法将子域名放到我的本地Web应用程序中吗?谢谢大家。

请注意,我只使用内置的asp.net开发服务器而不是完整的iis服务器。 (本周末我无法访问完整的IIS,但我仍然想知道这是否会有所帮助。)

3 个答案:

答案 0 :(得分:11)

不知道标题,但我使用的一个鲜为人知的技巧是所有127. *地址都是本地主机地址,而不仅仅是127.0.0.1。您实际上可以运行一个服务器监听127.0.0.1端口80,另一个Web服务器实例监听127.0.0.2端口80.那么你的名字是127.0.0.1 localhost,127.0.0.2可以是abc.localhost(或abc.mydomain)您可以根据本地网络服务器测试真实的实时网址等。

答案 1 :(得分:11)

我使用的是Windows 7,IIS 7.5,VS 2008,SQL Server 2005

我能够在localhost上成功模拟子域名,将以下行放入etc / hosts

127.0.0.2   myapp.localhost.com

并且,在IIS中,我设置了一个新的网站,对绑定部分进行了以下修改:

Hostname = myapp.localhost.com 
IP address = 127.0.0.2

我还创建了一个新的应用程序池,但没有必要。您可能必须更改用于处理请求的auth用户。我与默认的IIS用户有SQL连接权限错误。

IIS>Application Pools>>Right Click on your pool>Advanced Settings>Identity = LocalSystem

答案 2 :(得分:9)

您可以使用“ Request.Headers [”HOST“] ”获取子域完整的请求域。这是一个返回当前请求的子域的简单方法。此方法还假设您在域之后有一个“.COM”,“.NET”等,就像真实的Web一样。因此,您需要更改您的HOSTS文件以包含“localhost.com”,“abc.localhost.com”等。

public string subdomain()
{
    string host = Request.Headers["HOST"];
    if (!string.IsNullOrEmpty(host))
    {
        var parts = host.Split('.');
        if (parts.Length > 2)
        {
            return parts[0];
        }
    }
    return string.Empty;
}

我正在搜索这件事,这篇文章实际上帮助我解决了这个问题: https://web.archive.org/web/20090813174916/http://blogs.securancy.com/post/ASPNET-MVC-Subdomain-Routing.aspx