我正在编写一个MVC应用程序,我希望URL是SEO友好的,参数查找是按名称而不是id。例如,而不是像这样:
/Products/Category/23
我会有这样的事情:
/Products/Category/Books
并且,似乎最佳做法建议是用连字符而不是下划线或%20替换空格,因此上面示例中的多字类别将是这样的:
/Products/Category/Wall-Decorations
/Products/Category/some-other-name
但是,只要参数的原始值实际包含连字符,我们该怎么做?例如,像
/Products/Category/E-Books
在这种情况下,连字符实际上是“电子书”的一部分,而不是单词分隔符。
所以,如果我要:
Products.Where(x => x.Name == parameter.Replace("-",""));
然后,数据存储中的“电子书”与“电子书”(从参数替换的连字符)不匹配。
我能想出的唯一解决方案就是:
Products.Where(x=> x.Name.Replace("-","") == parameter.Replace("-",""));
这样,“Ebooks”(在数据存储中替换了连字符)将匹配“Ebooks”(从参数替换的连字符),但这将有效地使其到数据存储中的带连字符的值与值相同的位置没有连字符。虽然在这个人为的例子中,“电子书”和“电子书”应该永远不会存在,但在其他情况下,连字符的存在很重要。例如:公司名称,网址,保存的搜索,包括日期范围的破折号等(更不用说如果您允许用户创建这些名称,那么我们必须计划所有内容)。
所以,我已经找到了某些特定实例的潜在解决方法,我可以在这些实例中进行简化假设,但是有没有人有关于如何在所有情况下安全地处理这个问题的任何其他建议?
答案 0 :(得分:0)
我不确定你的意思是“安全地处理所有情况”。只要你总是删除密钥中的空格(这是一个字符串而不是数字 - 猜测你有一个实际派生密钥(主键)的数字键和URI的友好密钥?),这种方法是合理的。我必须知道你认为哪种情况适合这个方框。
如果某些键必须有空格,那么您可以在代码中用空格替换连字符。这是你在谈论的一个场景吗?