1

我有以下实体:

公司 -> 博客 -> 文章 -> 评论

每个公司都有一个博客(或多个博客),里面有文章和评论。

URL 是这样创建的:

{controller}/{Action}/{id}

博客/编辑/1

我想把公司放在它前面,出于 SEO 的目的,它更合乎逻辑:

SampleCo/博客/编辑

SampleCo 也可能有一个网站,其页面如下:

SampleCo/myPage.vbhtml

解决这个问题的最佳方法是什么?谢谢您的帮助。

注意:我已经看到多租户的链接,但我不认为这将是必需的。我不需要单独的实例,因为一切都是外键(公司到博客,博客到文章,文章到评论)。

4

2 回答 2

2

在 global.asax.cs 中,您应该能够将默认路由替换为:

        routes.MapRoute(
            "Default", // Route name
            "{company}/{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

唯一的问题是这适用于所有请求,因此如果您使用/需要站点其他部分的默认路由,则必须找到另一个解决方案。

在您的控制器中,您将拥有:

public class BlogController : Controller {
    public ActionResult Edit(String company, int id) {
    }
}
于 2012-07-27T14:52:20.400 回答
1

相信我,您不想弄乱默认路由,这会让您头疼,您可以保留默认路由,并创建一个辅助路由,例如:

 routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

    routes.MapRoute(
                "SEORoute1", // Route name
                "{company}/{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

当您需要使用路线时,只需使用此助手:

@Html.RouteLink("LinkText","SEORoute1",new { action = "Index", controller = "Home", company = item.Name, id = item.Code })
于 2012-07-27T15:15:16.317 回答