Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 允许用户在注册后浏览到username.host.com_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 允许用户在注册后浏览到username.host.com

C# 允许用户在注册后浏览到username.host.com,c#,asp.net,asp.net-mvc,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我正在使用Asp.net MVC3和C#以及IIS 7.5。我希望用户注册后,他可以使用username.host.com浏览我的网站,并且该用户名应该在我的查询字符串中对我可用,以便我可以仅显示与该特定用户名相关的数据。所有用户的逻辑都是相同的。我不想做任何花哨的事情,比如如果输入user1.host.com,那么我想重定向到单独的控制器和操作等。所有用户的应用程序逻辑都是相同的。我只想更改url在浏览器中的显示方式 注意:我不是说真正创建动态子域。这是一项艰巨的任务 因为在MVC中路由功能非

我正在使用Asp.net MVC3和C#以及IIS 7.5。我希望用户注册后,他可以使用username.host.com浏览我的网站,并且该用户名应该在我的查询字符串中对我可用,以便我可以仅显示与该特定用户名相关的数据。所有用户的逻辑都是相同的。我不想做任何花哨的事情,比如如果输入user1.host.com,那么我想重定向到单独的控制器和操作等。所有用户的应用程序逻辑都是相同的。我只想更改url在浏览器中的显示方式

注意:我不是说真正创建动态子域。这是一项艰巨的任务

因为在MVC中路由功能非常强大,所以我假设可以使用路由单独完成。另外,如果可能的话,我希望它也能在IIS/Cassini中的localhost上运行

例如:如果我浏览到jaggu.localhost:19883。它应该将我发送到localhost:19883/Home/index/Jaggu(因为默认情况下Home是控制器,index是方法)

我完全不知道如何做到这一点。任何帮助都将不胜感激


谢谢。

就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
,将自动调用并传递
username=“foo”
参数的
家庭控制器的
索引
操作


然后是困难的部分。子域和web服务器配置的注册和管理。一个更适合在

上讨论的主题使用www.{site}.com/{username}比您正在尝试的要容易得多

子域是用来分割单独的网站;不是内容区域


即使你能让它工作起来,你也会发现更多的问题,比如处理SSL证书(如果你需要的话)和浏览器有趣的“同源策略”。如果不注册子域,这是不可能的吗?可能只是化名什么的。在内部,它们都应该指向同一个站点。不知道。我只是想知道创建子域是否绝对必要?我不是该领域的专家,但我不知道DNS服务器如何知道这个子域以及在没有配置的情况下将其路由到哪个IP地址。好的,谢谢Darin。你对我说得有点清楚了。我已经发布到服务器故障也。可能是一些IIS或网络人员能够响应。可能是的重复项