C# 区分大小写到URL不区分大小写

C# 区分大小写到URL不区分大小写,c#,asp.net-mvc,base64,urlencode,case-sensitive,C#,Asp.net Mvc,Base64,Urlencode,Case Sensitive,我正在生成一个编码值以在我的URL中传递,问题是,我们的SEO经理配置应用程序,传递小写URL,他说他不会更改配置。现在我必须以某种方式对我的url进行编码,大写字母或整个字符串由它们的字符代码进行编码,这样我就可以在不破坏主值的情况下传递它 例如,生成的base64字符串如下所示: aHR0cDovL2xvY2FsaG9zdDoxMzUwL2hvdGVscy9nMy8xMzk1LTA1LTEwLzEvOTI3MjIyZmY but it turn to be like this, when i

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

例如,生成的base64字符串如下所示:

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

无法阅读的。。。解码时大小写会导致问题。

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

但是,如果经理坚持的配置是传入或传出查询字符串参数的大小写不正确,则应通知他违反了URI规范,特别是本节。当然,最终取决于您自己的内部公司的选择,您是否只希望在内部URI中使用小写字母,但您不应该假设其他处理URI的应用程序将这样运行

如上@sachin所述,如果您可以将此作为一个POST请求(而不是像我现在假设的那样的GET),并且前提是您的经理在发送这些请求时也不会降低其级别:/您可以通过POST发送此数据

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

为了清楚起见:“lol”将在Base32中编码为“NRXWY===”,然后将其大小写降低为“NRXWY==”,在解码之前,您可以将其大写回“NRXWY==”

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

  • Base32符合RFC4648的要求,作者声称它经过测试,工作正常

  • 另一个软件包看起来很吸引人,因为它支持zBase32,zBase32的优点是它已经只使用小写字符,所以您不必担心更改大小写。porter/作者提供了关于如何获得zBase32编码的说明


  • 这两个(Base32和zBase32)都使用Base64字符的子集,所以它们都可以很好地使用URI,使用的所有字符在URI中都是有效的(utf-8内容是无关的,因为您只是在编码字节,所以当您从Base32解码时,您将得到相同的字节)

    如果无法控制将其转换为小写,则不能使用base64对其进行编码,base64依赖于使用大写字符

    但是,如果经理坚持的配置是传入或传出查询字符串参数的大小写不正确,则应通知他违反了URI规范,特别是本节。当然,最终取决于您自己的内部公司的选择,您是否只希望在内部URI中使用小写字母,但您不应该假设其他处理URI的应用程序将这样运行

    如上@sachin所述,如果您可以将此作为一个POST请求(而不是像我现在假设的那样的GET),并且前提是您的经理在发送这些请求时也不会降低其级别:/您可以通过POST发送此数据

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

    为了清楚起见:“lol”将在Base32中编码为“NRXWY===”,然后将其大小写降低为“NRXWY==”,在解码之前,您可以将其大写回“NRXWY==”

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

  • Base32符合RFC4648的要求,作者声称它经过测试,工作正常

  • 另一个软件包看起来很吸引人,因为它支持zBase32,zBase32的优点是它已经只使用小写字符,所以您不必担心更改大小写。porter/作者提供了关于如何获得zBase32编码的说明


  • 这两个(Base32和zBase32)都使用Base64字符的子集,所以它们都可以很好地使用URI,使用的所有字符在URI中都是有效的(utf-8内容是无关的,因为您只是在编码字节,所以当您从Base32解码时,您将得到相同的字节)

    您在这里试图编码的是表单字段值吗?如果是这样的话,为什么要将其包含在Url中而不发布呢?@sachin因为读者不会发布,它只会获取(或者最后,获取随附的所有示例)
    我们的SEO经理配置应用程序,以传递小写Url,他说他不会改变配置
    ——让IT人员配置他的互联网接入,这样Youtube URL也可以小写。你想在这里编码的是表单字段值吗?如果是这样的话,为什么要将其包含在Url中而不发布呢?@sachin因为读者不会发布,它只会获取(或者最后,获取随附的所有示例)
    我们的SEO经理配置应用程序,以传递小写Url,他说他不会改变配置
    -让IT人员配置他的互联网接入,这样Youtube URL也可以小写。我告诉他了,但没有效果,我设法对其进行了编码,以便能够将大写字符带回来,有效符号不是base64本身的一部分。顺便问一下,base32使用什么?它需要更多的字符编码吗?例如,base64只需要+、/和=。第二,我们是utf-8字符系统的用户,base32支持这个问题吗?第三,base32是在C语言上实现的吗?我已经更新了答案,但短版本是否定的,它使用更少的编码字符,是的,它仍然支持utf-8,是的,它是在C语言中实现的,