注册时允许用户浏览到username.host.com

时间:2011-09-16 07:40:21

标签: c# asp.net asp.net-mvc asp.net-mvc-3

我使用的是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是控制器,索引是方法)

我对如何实现这一点完全无能为力。任何帮助将不胜感激。

感谢。

2 个答案:

答案 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证书(如果您需要)以及浏览器总是很有趣的“同源策略”。