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

问题描述 投票:0回答:1

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

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

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

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

c# asp.net-mvc base64 urlencode case-sensitive
1个回答
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的优势在于它只使用了小写字符,因此您不必担心更改大小写。 porter / author包含了有关如何获取zBase32编码的说明

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

© www.soinside.com 2019 - 2024. All rights reserved.