我正在将我的网络应用程序中的链接发送给用户邮件(用于确认用户注册),如下所示:
<a target="_blank" href="http://localhost:2817/ConfirmRegistration?confirm=Y0tcmGepe7wjH7A1CT1IaA==">
http://localhost:2817/ConfirmRegistration?confirm=Y0tcmGepe7wjH7A1CT1IaA==
</a>
但Chrome会提醒此消息:
查询字符串无效吗?我该如何解决?
顺便说一句:
我的应用程序是在C#和MVC3
答案 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