如何在ASP.NETMVC中在url中添加页面标题?(URL生成)

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

如何动态创建网址/链接,例如:www.restaurant.com/restaurant/restaurant-name-without-some-characters-like-space-coma-etc/132

我可以使用哪些关键字来搜索关于此主题的一些文章?(如何在asp.net mvc中生成和处理这种类型的url)

有一些问题:如何生成链接?(商店slu in在DB?)重定向或如果slu is不规范?

提问于
用户回答回答于

我一直在数据库中一直存储slug,以及它们引用的任何实体。因此,对于博客文章,“posts”表中会有一个“slug”字段。

要在ASP.Net MVC中处理它很简单 - 你只需要使用一个常规路线来捕获参数中的slu((甚至可能仅仅使用{id}),然后你的控制器会查找数据库中的slu,,加载实体,并正常显示。

虽然你可以使用一个简单的正则表达式替换空格,而不用生成你的slu,,但实际上这很快就会崩溃。您需要考虑可能出现在标题中的各种字符。迈克尔卡普兰的博客与这个确切目的有很大关系; 他分享了一个可以从字符串中去除变音符号的功能

所以,你的“生成slu”“算法通常应该采取以下形式:

  1. 修剪前/后空白字符串
  2. 使用Michael Kaplan的功能或类似功能去除变音标记
  3. 小写字符串用于规范化
  4. 用破折号替换所有非单词字符
用户回答回答于

你必须使用如下的东西。

Routes.MapRoute(
    "Post",
    "posts/{id}/{*title}",
    new { controller = "Posts", action = "view" }
);

和一个简单的扩展方法:

public static class UrlExtensions
{

    public static string ResolveSubjectForUrl(this HtmlHelper source, string subject)
    {
        return Regex.Replace(Regex.Replace(subject, "[^\\w]", "-"), "[-]{2,}", "-");
    }

}

扫码关注云+社区