将MVC区域部署为自立站点

时间:2013-06-18 04:28:24

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

我有一个包含多个区域的MVC应用程序。它们共享许多通用代码和组件,因此我不想将它们分解为单独的项目。但我想将它们部署到不同的网站上。

正常路由是:

www.mysharedsite.com/Area1
www.mysharedsite.com/Area2
...

但我想将它们部署为:

www.area1site.com/
www.area2site.com/
...

我正在考虑在web.config中添加一个字段,然后在每个区域的RouteConfig和RegisterAreas中添加逻辑来更改路由并完全关闭路由到控制器。但这似乎很糟糕。

这样做有干净的方法吗?

3 个答案:

答案 0 :(得分:1)

我要做的是创建并安装一个自定义ActionInvoker,它从请求中读取主机名,并根据它为您设置适当的区域路径:

protected override ActionResult InvokeActionMethod(...)
{
    // Get hostname
    var hostname = controllerContext.HttpContext.Request.Url.Host;

    if (hostname == "some value you want")
    {
        controllerContext.RouteData.DataTokens["area"] = "your area here";
    }

    return base.InvokeActionMethod(controllerContext, actionDescriptor, parameters);
}

答案 1 :(得分:1)

您可以根据主机名指定路由,将其映射到某个区域。根据您问题中的网址格式:

routes.Add("DomainRoute", new DomainRoute( 
    "{area}site.com",     // Domain with parameters 
    "{id}",    // URL with parameters 
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults 
));

请参阅此帖子了解DomainRoute类:

http://blog.maartenballiauw.be/post/2009/05/20/ASPNET-MVC-Domain-Routing.aspx

答案 2 :(得分:0)

为什么不将公共代码放在单独的dll中 并将您的网站链接到此dll?

如果您添加另一个也共享公共代码的网站,您的解决方案会更大。