2009-05-16 66 views
16

我想开发一个有多个子域的asp.net站点。我对一般的网站,尤其是asp.net都很陌生。但是,似乎通配符子域名已正确设置了dns条目和Web服务器配置的组合 - 这不会在我的开发计算机上发生。所以我手动插入条目在我的窗户hosts文件如何测试开发机器上的子域名? abc.localhost

127.0.0.1 localhost 
127.0.0.1 abc.localhost 
127.0.0.1 xyz.localhost 

然而,当我尝试询问Request.Url财产没有子域待观察。例如,如果我在浏览器中点击http://abc.localhost:1660/,我会从Request.Uri.ToString()获得http://localhost:1660/; abc刚刚离开?!

我不知道hosts文件为什么像这样工作,但是有没有其他方法可以用来将子域添加到我的本地Web应用程序中?谢谢你们。

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

+0

我的确认为这可能是使用内置网络服务器的一个因素。我不相信这会发生在一般的IIS服务器上。 (如果您正在运行XP,则确实拥有它;您只需将您的网站设置为虚拟应用程序)。 – 2009-08-18 00:07:35

回答

9

你可以通过使用“Request.Headers [”HOST“]”获得请求的子域完整的子域。这是一个返回当前请求的子域的简单方法。这种方法还假定你在域名后面有一个“.COM”,“.NET”等,就像真正的网页一样。所以,你要改变你的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

9

不知道标题,但是我已经使用了一个鲜为人知的技巧所有的127. *地址都是localhost地址,而不仅仅是127.0.0.1。实际上,您可以运行一台监听127.0.0.1端口80的服务器,以及另一台监听127.0.0.2端口80的web服务器实例。那么,您将名称127.0.0.1 localhost,127.0.0.2可能是abc.localhost(或abc.mydomain .com,所以你可以测试真正的本地网络服务器的实时URL)等。

+2

伟大的提示。从来不知道127. *是本地主机..很酷 – ppumkin 2012-06-15 09:00:55

9

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

我是能够成功地模拟子域localhost上买把下面的行等/主机

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