2013-07-26 40 views
0

我试图匹配请求URL发送到我的ASP.NET应用程序不区分大小写,因为机器人或用户可能错误地请求非规范形式,我需要重定向他们。如何比较URL不区分大小写?

哪一种比较模式在语义上是最好的选择?

StringComparison.OrdinalIgnoreCase 
StringComparison.InvariantCultureIgnoreCase 
StringComparison.CurrentCultureIgnoreCase 

Ordinal可能是限制性的,因为它进行码点匹配。可能没有考虑到所有的语言变化。 CurrentCulture似乎不适合网址,因为网址应该不是特定于文化的。 InvariantCulture也不完全有意义,因为它代表了地球上不存在的类似英语的文化。我宁愿不将它用于面向用户的字符串,甚至不用于浏览器中的URL。

哪种模式是正确的?

回答

1

正如你所指出的,没有完美的解决方案。我一直使用InvariantCulture,并对结果感到满意。但是,我的网址通常是英文或英文的,所以很难遇到问题。

另一种可能性是编写拦截请求并从HTTP标头获取用户文化的处理程序或模块。然后它可以使用该文化来进行转换。也许。

这是你永远可以花费的东西之一。我刚刚选择InvariantCulture,并认为如果我遇到问题,我会重新审视这个决定。到目前为止,没有人注意到。至少,没有人抱怨过。