查询字符串中的Base64编码参数问题

时间:2012-06-26 11:22:33

标签: html asp.net-mvc-3 c#-4.0 hyperlink

我正在将我的网络应用程序中的链接发送给用户邮件(用于确认用户注册),如下所示:

<a target="_blank" href="http://localhost:2817/ConfirmRegistration?confirm=Y0tcmGepe7wjH7A1CT1IaA==">
http://localhost:2817/ConfirmRegistration?confirm=Y0tcmGepe7wjH7A1CT1IaA==
</a>

但Chrome会提醒此消息:

Chrome Message

查询字符串无效吗?我该如何解决?

顺便说一句:
我的应用程序是在C#和MVC3

5 个答案:

答案 0 :(得分:2)

您应对confirm参数进行URL编码。您得到的错误是因为最后一个==片段。

对于此用途HttpServerUtility.UrlEncode或类似的框架方法。

答案 1 :(得分:1)

您应该对参数值进行URL编码,因为=本身用于将参数名称与参数值分开。

答案 2 :(得分:0)

//您可以通过将两个字符'+'替换为'_'而将'/'替换为' - '

来发送您的值
string confirm=confirm.Replace('+', '_').Replace('/', '+');

<a target="_blank" href="http://localhost:2817/ConfirmRegistration?confirm=@confirm">
http://localhost:2817/ConfirmRegistration?confirm=@confirm
</a>

//您可以使用

在服务器端获取数据
if (Request.QueryString["confirm"] != null && Request.QueryString["confirm"].ToString() != "")
{
       string confirm = HttpUtility.HtmlDecode(Request.QueryString["confirm"]).Replace('_', '+').Replace('-', '/');
}

答案 3 :(得分:0)

我正在使用HttpUtility.UrlEncode,但如果base64编码的字符串包含“+”符号,则会出现问题。它被正确地编码为“%2b”但是当它从浏览器返回时它被解释为空格。所以,我使用了两种简单的编码/解码方法:

public static string UrlEncodeBase64(string base64Input)
{
    return base64Input.Replace('+', '.').Replace('/', '_').Replace('=', '-');
}

public static string UrlDecodeBase64(string encodedBase64Input)
{
    return encodedBase64Input.Replace('.', '+').Replace('_', '/').Replace('-', '=');
}

答案 4 :(得分:0)

如果您使用的是ASP.net核心,则可以使用WebEncoders.Base64UrlEncode和WebEncoders.Base64UrlDecode