0

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

正常的路由是:

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

但我想将它们部署为:

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

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

有没有一种干净的方法可以做到这一点?

4

3 回答 3

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);
}
于 2013-06-18T04:37:33.197 回答
1

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

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

于 2013-06-18T05:13:39.627 回答
0

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

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

于 2013-06-18T05:12:35.750 回答