情景:
有两个实体称“书籍”和“书评”。可以有多本书,每本书都可以有多个评论。
每篇评论和图书都应该有一个单独的永久链接。用户可以使用单独的输入表单添加书籍和评论。一旦添加任何书籍/评论,它应该可以通过其固定链接访问。
任何人都可以指出我应该如何实施?
答案 0 :(得分:3)
网址路由将开箱即用,无需额外的实际工作。
只需创建一个Books或BookReviews控制器。 创建一个采用Id
的操作方法你会有像这样的基本永久链接 /书籍/详细信息/ 1 和 / BookReviews /详情/ 4
如果你喜欢这样的永久链接,那么你很高兴。 :)
然而,如果你想进一步发展并使其更加适合搜索引擎,那就更多了......
首先,您应该创建或找到一个简单的“slug”编码器,它将获取一个字符串(可能是书籍或评论者的标题),并将任何非字母数字字符编码为 - 或类似字符。 URL Slugify algorithm in C#?
现在我们可以创建一个像
这样的路线书籍/ {TITLE} - {ID}
routes.MapRoute(
"BooksSeoRoute",
"Books/{slug}-{id}",
new { controller = "Books", action = "Details" } // Parameter defaults
);
所以我们最终得到的永久链接看起来像: 图书/该-标题的最图书-38
对于书评,您可能希望采用“嵌套”方法,以便使用
routes.MapRoute(
"BookReviewsSeoRoute",
"Books/{book-slug}/{slug}-{id}",
new { controller = "BookReviews", action = "Details" } // Parameter defaults
);
书籍/的-的即用的图书-38 /审查逐约翰史密斯-24
您可以向模型/ entites /数据库添加一个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})