C# 允许用户在注册后浏览到username.host.com
我正在使用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是方法) 我完全不知道如何做到这一点。任何帮助都将不胜感激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 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或网络人员能够响应。可能是的重复项