C#Byte []到Url友好字符串

时间:2009-12-11 08:50:17

标签: c# base64 friendly-url

我正在为一个我正在整理的简单网站开发快速验证码生成器,我希望在页面的URL中传递加密密钥。我可能很容易做到这一点作为一个查询字符串参数,但我也希望不会(因为没有其他任何东西从查询字符串中运行)...

我的加密代码生成一个byte [],然后使用Convert.ToBase64String(byte [])将其转换为字符串。但是,这个字符串仍然不是友好的url,因为它可以包含'/'和'='之类的东西。有没有人知道在.NET框架中有一个更好的函数来将字节数组转换为url友好字符串?

我知道所有关于System.Web.HttpUtility.UrlEncode()及其等价物,但是,它们只能与查询字符串参数一起使用。如果我在路径内部对'='进行url编码,我的Web服务器会返回400 Bad Request错误。

无论如何,这不是一个关键问题,但希望有人能给我一个很好的解决方案

**编辑:为了绝对确定我正在用字符串做什么,我想我会提供更多信息。

我的加密算法产生的byte []应该通过某种算法输入,使其成为url友好字符串。在此之后,它将成为XElement的内容,然后将其用作XSLT转换的源文档,并用作锚点的href属性的一部分。我不相信xslt转换导致问题,因为路径上出现的内容似乎是编码的查询字符串参数,但会导致HTTP 400

我也在base64字符串上尝试了HttpUtility.UrlPathEncode(),但这似乎也没有做到(我仍然以我的网址中的'/'结尾)**

2 个答案:

答案 0 :(得分:89)

您正在HttpServerUtility.UrlTokenEncode中寻找HttpServerUtility.UrlTokenDecodeSystem.Web

他们用base64编码,用' - '和'_'代替潜在危险的'+'和'/'字符。

MSDN documentation

答案 1 :(得分:1)

查看System.BitConverter.ToString(myByteArray)

对于像哈希这样的东西的单向编码很方便,但正如ssg所指出的那样,效率不高。我不会推荐它用于大量数据。