我不知道如何问这个,我也不知道它叫什么,所以我只是描述我想要实现的目标。
在数据库中,一些文章的标题最初有空格:
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
解析后,它们变成了相同的
标题 标题
从数据库中检索文章时会出现问题,因为我会得到两个结果,一个用于“标题”,一个用于“标题”。
答案 0 :(得分:1)
我会实现这样的功能:
<强> 1。创建新文章时,请根据标题生成URL表示。
使用将标题转换为合适表示的函数。 例如,标题“这是一个例子”可能会产生类似“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
提取标识文章的网址部分,在本例中为“this_is_an_example_2”。
如果有,则拥有数据库中文章的标识符。因此,您可以使用“this_is_an_example_2”ID在数据库中查询文章,并向用户显示文章的内容。
这可能涉及一些URL重写。不幸的是,我无法在asp.NET中帮助你。一些关于这个主题的搜索肯定会对你有帮助。