我使用的是Asp.net MVC3和C#以及IIS 7.5。我希望一旦用户注册,他就可以使用username.host.com浏览我的网站,这个用户名应该在我的查询字符串中可用,所以我只能显示与该特定用户名相关的数据。所有用户的所有逻辑都是相同的。我不想做任何花哨的事情,如果输入user1.host.com然后我想重定向到一个单独的控制器和动作等。所有用户的所有应用程序逻辑都是相同的。我只是想改变网址在浏览器中显示的方式。
注意:我不是在谈论真正创建动态子域名。这是很多任务!
由于路由在MVC中非常强大,我认为可以使用路由单独完成。另外,如果可能的话,我希望这也适用于IIS / Cassini中的localhost。
例如:如果我浏览 jaggu.localhost:19883 。它应该发送到localhost:19883 / Home / index / Jaggu(因为默认情况下Home是控制器,索引是方法)
我对如何实现这一点完全无能为力。任何帮助将不胜感激。
感谢。
答案 0 :(得分:3)
就ASP.NET MVC路由而言,它很容易。只需编写自定义路线:
public class MyRoute : Route
{
public MyRoute(string url, object defaults)
: base(url, new RouteValueDictionary(defaults), new MvcRouteHandler())
{ }
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var rd = base.GetRouteData(httpContext);
var tokens = httpContext.Request.Url.Host.Split('.');
if (tokens.Length > 1)
{
rd.Values["username"] = tokens[0];
}
return rd;
}
}
然后注册这条路线:
routes.Add(
"Default",
new MyRoute(
"{controller}/{action}/{username}",
new { controller = "Home", action = "Index", username = UrlParameter.Optional }
)
);
现在,当有人请求http://foo.host.com
时,系统会自动调用Index
HomeController
的{{1}}动作并传递username="foo"
参数。
然后是困难的部分。子域和Web服务器配置的注册和管理。一个更适合在http://serverfault.com
上讨论的主题答案 1 :(得分:0)
使用www。{site} .com / {username}要比使用它更容易。
子域名旨在划分不同的网站;不是内容领域。
即使您使用它,您也会发现更多问题,例如处理SSL证书(如果您需要)以及浏览器总是很有趣的“同源策略”。