我有这样的托管和域名:
www.EXAMPLE.com
我创建了几个这样的子域:
www.PAGE1.EXAMPLE.com
www.PAGE2.EXAMPLE.com
www.PAGE3.EXAMPLE.com
... etc...
所有这些子域都指向同一个 ASP.NET MVC 5 应用程序。
我想制作一个根据子域加载数据的系统。
例子:
我有文章对象,可以是自动评论或游戏评论或图书评论等......
我想从 www.auto.example.com 加载文章类型为 Auto 的数据,到 www.book.example.com 我想加载 Book 等类型的数据。
页面会有很多种类型。
做到这一点的最佳实践是什么?
顶级域名 www.example.com 应该显示其他内容。这将是其他人的主页。
您可以通过编写自定义路由来做到这一点。方法如下(改编自是否可以基于子域创建 ASP.NET MVC 路由?)
public class SubdomainRoute : RouteBase
{
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var host = httpContext.Request.Url.Host;
var index = host.IndexOf(".");
string[] segments = httpContext.Request.Url.PathAndQuery.Split('/');
if (index < 0)
return null;
var subdomain = host.Substring(0, index);
string controller = (segments.Length > 0) ? segments[0] : "Home";
string action = (segments.Length > 1) ? segments[1] : "Index";
var routeData = new RouteData(this, new MvcRouteHandler());
routeData.Values.Add("controller", controller); //Goes to the relevant Controller class
routeData.Values.Add("action", action); //Goes to the relevant action method on the specified Controller
routeData.Values.Add("subdomain", subdomain); //pass subdomain as argument to action method
return routeData;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
//Implement your formating Url formating here
return null;
}
}
像这样添加到 Global.asax.cs 中的路由表中:
routes.Add(new SubdomainRoute());
和你的控制器方法:
public ActionResult Index(string subdomain)
{
//Query your database for the relevant articles based on subdomain
var viewmodel = MyRepository.GetArticles(subdomain);
Return View(viewmodel);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)