【问题标题】:ASP.NET MVC / C# - String to valid URL characters?ASP.NET MVC / C# - 有效 URL 字符的字符串?
【发布时间】:2011-12-19 02:36:21
【问题描述】:

我不知道怎么问这个,我也不知道它叫什么,所以我只是描述一下我想要实现的目标。

在数据库中,有些文章的标题原来有空格:

my title with spaces

但在url中,空格被其他字符替换,例如加号(+)或下划线(_)

http://www.mydomain.com/mycontroller/myaction/my_title_with_spaces

http://www.mydomain.com/mycontroller/myaction/my+title+with+spaces

现在,您如何在 C# 中做到这一点?或者在 ASP.NET MVC 中有没有可以做类似事情的助手?

假设我们实现了上述 URL,是否存在 URL 中两个唯一标题相同的风险?请考虑以下标题:

Title's
Titles

解析后变成一样的

标题 标题

这在从数据库中检索文章时会出现问题,因为我会得到两个结果,一个是“Title”,一个是“Title's”。

【问题讨论】:

  • 像'这样的字符应该是唯一的。对于 url 的问题,我不完全确定。我不完全理解你的问题。

标签: c# asp.net-mvc url


【解决方案1】:

我会像这样实现该功能:

1.创建新文章时,根据标题生成 URL 表示。

使用将标题转换为合适表示的函数。 例如,标题“This is an example”可能会生成类似于“This_is_an_example”的内容。

这取决于你。您可以创建一个函数来使用您定义的规则解析标题,或者如果它更适合您的问题,则使用现有的。

2。确保 URL 表示是唯一的

如果它是一个 ID,它必须是唯一的。因此,在创建新文章时,您必须查询数据库以获取结果 URL 表示。如果您从数据库中获得结果,则意味着新创建的文章生成的表示与已创建的文章之一相同。向其中添加一些内容,使其保持独一无二。

这可能类似于“This_is_an_example_2”。在这种情况下,我们将“_2”添加到生成的表示的末尾,因此它与已经存在的表示不同。同样,每次更改时,您都必须确保此表示保持唯一性。

3.将创建的 ID 与文章数据一起保存在数据库中

请务必在数据库中保存“This_is_an_example” ID 并将其与文章相关联。甚至可以作为表的主键?

4.在数据库中查询正确的文章

现在,关于向网站访问者展示正确的文章: 例如,当访问者请求以下资源时:

http://www.mydomain.com/mycontroller/myaction/this_is_an_example_2

提取标识文章的 URL 部分,在本例中为“this_is_an_example_2”。

当你有了它,你就有了数据库中文章的标识符。因此,您可以在数据库中查询 ID 为“this_is_an_example_2”的文章,并将文章的内容显示给用户。

这可能涉及一些 URL 重写。不幸的是,我无法在 asp.NET 中为您提供帮助。对该主题进行一些搜索肯定会对您有所帮助。

【讨论】:

  • 就我个人而言,我会避免创建唯一的名称,而只使用 id 来实现唯一性,但也会添加一个用于 SEO 的文本块。就像 Stackoverflow 所做的那样。 ID 是唯一的,并且 url 工作得很好,没有最后的文本。文字是为了美观。
  • @SergioTapia,所以我应该避免在 URL 上加上标题吗?
  • 我同意,这是一个方法问题。我从未实现过上述功能,只是举了一个例子。
  • 你不应该依赖标题的唯一性。 URL 上的标题主要用于 SEO 目的(如 Sergio 所述),与 ID 一起使用而不是单独使用它可能是更好的方法。如果您不熟悉 SEO(搜索引擎优化),我建议您先对该主题进行一些研究,以了解为什么在 URL 中使用标题。
猜你喜欢
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
相关资源
最近更新 更多