区分大小写 URL 不区分大小写

case sensitive to URL case insensitive

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

例如我生成的base64字符串如下:

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

无法读取...该案例导致解码时出现问题。

如果它会在您的控制之外转换为小写字母,则不能使用 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,所有使用的字符在 URI 中都是有效的(utf-8 内容无关紧要,因为您'只是编码字节,所以当你从 Base32 解码时你会得到相同的字节)