3

如果有人能够帮助我解决这个问题,那将是非常好的,因为我是web开发和ASP.NET MVC的新手。我的目标是设计一个可以帮助用户创建自己的迷你网站的MVC应用程序。每个用户将获得他们自己的迷你网站和管理面板来更改其网站的页面和模板。我认为有些脚本可以实现类似的功能,但是我们需要根据自己的具体要求创建自己的脚本 为了实现这一目标,我创建了一个主要的mvc 3应用程序,并在其下创建了一个区域作为Site。我们希望用户拥有自己的子域名网址,例如www.site1.mainsite.com,其中site1是用户迷你网站的名称。对于我加2路一个主站点,另一个像MVC3站点生成器应用程序设计

routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      new[] { "MainSite.UI.Controllers" } 
     ); 

区在区注册

context.MapRoute(
      "Sites_default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      new {controller = new SiteConstraint()}, 
      new[] { "MainSite.UI.Areas.Site.Controllers" }); 

他们都具有相同的URL类型,但区域航线有一个约束条件,其中我加入像

var url = httpContext.Request.Headers["HOST"]; 
     var storeName = url.Split('.')[1]; 
     var match = storeName != "mainsite"; 
     return match; 

到目前为止它的工作,但我不认为它是一个很好的设计。除此之外,我还需要添加两个区域,一个是siteadmin,另一个是博客。 什么应该是实现这一目标的最佳途径?

  • 子域网址应直接向区“网站”
  • 子域网址/管理员应导入区“siteadmin”
  • 域/博客应该被路由到博客领域。
  • 域其他URL应该由主控制器预先处理

感谢

回答

1

我没有得到连一个回复:(但我试图与路线打并取得了一些东西接近我一直在寻找对。 感谢路线调试器,它帮我看看是怎么回事错误的路线

当我尝试添加另一个领域“管理”,并与路线注册它下面

context.MapRoute(
      "SiteAdmin_default", 
      "Admin/{controller}/{action}/{id}", 
      new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional }, 
      new { controller = new SiteConstraint() }, 
      new[] { "MainSite.UI.Areas.SiteAdmin.Controllers" } 
     ); 

事情开始出错了。路由调试器帮助我弄清楚发生了什么。 对我来说,路线的顺序真的很重要,所以我必须确保我的区域以正确的顺序注册。

AreaRegistration.RegisterAllAreas() 

没有按照正确的顺序注册我的路线,谷歌给了我这个帮手方法。

public static class RouteHelper 
{ 
    public static void RegisterArea<T>(RouteCollection routes, object state) where T : AreaRegistration 
    { 
     var registration = (AreaRegistration)Activator.CreateInstance(typeof(T)); 
     var context = new AreaRegistrationContext(registration.AreaName, routes, state); 
     var tNamespace = registration.GetType().Namespace; 
     if (tNamespace != null) 
     { 
      context.Namespaces.Add(tNamespace + ".*"); 
     } 
     registration.RegisterArea(context); 
    } 
} 

这种方法帮助我在全球ASAX注册所需顺序的领域

RouteHelper.RegisterArea<SiteAdminAreaRegistration>(RouteTable.Routes, null); 
RouteHelper.RegisterArea<SiteAreaRegistration>(RouteTable.Routes, null); 

我把它写下来,我得到了什么,只要一个答案,这样其他人可能会发现它很有用。