7

我正在我的 Web 应用程序中向用户邮件发送一个链接(用于确认用户注册),如下所示:

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

但 Chrome 会提醒此消息:

铬消息

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

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

4

5 回答 5

6

我使用的是 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('-', '=');
}
于 2018-01-25T11:13:41.143 回答
3

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

为此,请使用HttpServerUtility.UrlEncode或类似的框架方法。

于 2012-06-26T11:31:18.060 回答
1

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

于 2012-06-26T11:31:02.877 回答
1

您可以通过将两个 char 替换+_/来发送您的值-

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('-', '/');
}
于 2015-04-14T07:32:44.160 回答
0

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

于 2020-09-30T08:10:51.550 回答