【问题标题】:Wordpress like dynamic permalinks in ASP.NET MVC2/3 or ASP.NET 4.0Wordpress 类似于 ASP.NET MVC2/3 或 ASP.NET 4.0 中的动态永久链接
【发布时间】:2011-06-02 06:09:25
【问题描述】:

场景:

有两个实体,分别是“图书”和“书评”。可以有多本书,每本书可以有多个评论。

每篇评论和每本书都应该有一个单独的固定链接。用户可以使用单独的输入表单添加书籍和评论。一旦添加任何书籍/评论,就应该可以通过其永久链接访问它。

任何人都可以指出我应该如何实施的正确方向?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-routing permalinks


    【解决方案1】:

    网址路由将立即处理此问题,无需额外的实际工作。

    只需创建一个 Books 或 BookReviews 控制器。 创建一个采用 Id 的操作方法

    您将拥有基本的永久链接,例如 /书籍/详情/1 和 /BookReviews/Details/4

    如果您对这样的固定链接感到满意,那么您就可以开始了。 :)

    然而,如果你想更进一步,通过更多的工作让它对搜索引擎更加友好......

    首先,您应该创建或找到一个简单的“slug”编码器,它将接受一个字符串(可能是书名或评论者的标题)并将任何非字母数字字符编码为 - 或类似字符。 URL Slugify algorithm in C#?

    现在我们可以创建一个类似的路由

    书籍/{title}-{id}

            routes.MapRoute(
                "BooksSeoRoute", 
                "Books/{slug}-{id}", 
                new { controller = "Books", action = "Details" } // Parameter defaults
            );
    

    所以我们最终得到如下所示的永久链接: 书籍/The-Title-Of-The-Book-38

    对于书评,您可能希望采用“嵌套”方法,以便您可以使用

        routes.MapRoute(
                "BookReviewsSeoRoute", 
                "Books/{book-slug}/{slug}-{id}", 
                new { controller = "BookReviews", action = "Details" } // Parameter defaults
            );
    

    书籍/The-The-Of-The-Book-38/Review-by-John-Smith-24

    您可以在模型/实体/数据库中添加一个 slug 字段,也可以添加一个 getter,从您的标题/作者动态生成它

    public class Book {
    
    public string Id {get;set;}
    
    public string Title {get;set;}
    
    public string Slug
    get
    {
     return SlugEncoder.EncodeString(this.Title);
    }
    }
    

    在你看来

    =Html.ActionLink("Permalink","Details","Book",new{@Id=Model.Id, @Slug=Model.Slug})
    

    【讨论】:

    • 你好。我当前在路由配置中的设置如您在代码中所述,但我需要在根级别更改它的 slug 参数。因此,我需要的是:example.com/ {slug},而不是:“Books/{book-slug}/{slug}-{id}”。你能帮我解决这个问题吗?
    猜你喜欢
    • 2017-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2013-04-18
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多