区分大小写敏感的URL不区分大小写

时间:2016-07-31 13:50:48

标签: c# asp.net-mvc base64 urlencode case-sensitive

我正在生成一个编码值以便在我的URL中传递,问题是,我们的SEO管理器配置应用程序,传递小写URL,他说他不会更改配置。现在我必须以某种方式编码我的网址,大写字母或整个字符串由其字符代码编码,所以我可以传递它而不会破坏主要值,

例如,我得到的base64字符串如下:

aHR0cDovL2xvY2FsaG9zdDoxMzUwL2hvdGVscy9nMy8xMzk1LTA1LTEwLzEvOTI3MjIyZmY
but it turn to be like this, when is passed to controller:
ahr0cdovl2xvy2fsag9zddoxmzuwl2hvdgvscy9nmy8xmzk1lta1ltewlzevoti3mjiyzmy

无法读取...解码时导致问题的原因。

1 个答案:

答案 0 :(得分:1)

如果它将被转换为控件的小写,则无法使用base64对其进行编码,而base64依赖于使用大写字符。

如果您的管理员坚持的配置是传入或传出的查询字符串参数被错误地降低,则应告知他他违反了URI规范,特别是query string部分。当然,最终由您自己的内部公司选择是否只需要内部URI中的小写,但是您不应该假设处理URI的其他应用程序将以这样的方式运行。

正如@sachin所述,如果你可以把它作为一个POST请求(而不是像我现在假设它那样的GET),并且只要你的经理在发送它们时不低于那些:/你可以发送这些数据通过POST。

或者,您可以使用Base32来解决此问题,它仅依赖于大写字符,但您可以在解码(现在为Base32)字符串之前将接收到的值转换为大写字母。这是一个非常荒谬的解决方案......

为了清楚起见:“lol”会在Base32中编码为“NRXWY ===”,然后将其设置为“nrxwy ===”,然后你可以将其大写回“NRXWY ===”解码。

这是两个执行Base32编码的NuGet包:

  1. Base32符合RFC4648 here,并且作者声称它已经过测试并正常运行。

  2. 另一个看起来很吸引人的软件包,因为它支持zBase32 here,zBase32的优势在于它只使用小写字符,所以你不必担心更改大小写。搬运工/作者已经包含了如何获得zBase32编码的说明

  3. 这两个(Base32和zBase32)都使用Base64字符的子集,所以它们都可以正常使用URI,所有使用的charctes都在URI中有效(utf-8内容无关紧要,因为你是只是编码字节,所以当你从Base32解码时你会得到相同的字节)