Проблема с Base64-кодированным параметром в строке запроса

Я отправляю ссылку в своем веб-приложении на почту пользователей (для подтверждения регистрации пользователя) следующим образом:

<a target="_blank" href="#" onclick="location.href='http://localhost:2817/ConfirmRegistration?confirm=Y0tcmGepe7wjH7A1CT1IaA=='; return false;">
http://localhost:2817/ConfirmRegistration?confirm=Y0tcmGepe7wjH7A1CT1IaA==
</a>

Но Chrome предупреждает это сообщение:

Chrome Message

Неверна ли строка запроса? Как я могу его решить?

BTW:
Мое приложение находится в С# и MVC3

Ответ 1

URL-адрес должен кодироваться confirm. Ошибка, которую вы получаете, связана с последним фрагментом ==.

Для этого используйте HttpServerUtility.UrlEncode или аналогичные методы структуры.

Ответ 2

Вероятно, вы должны URL-кодировать значение параметра, так как = сам используется для разделения имени параметра на значение параметра.

Ответ 3

Вы можете отправить свое значение, заменив два полукокса + к _ и / к -:

string confirm=confirm.Replace('+', '_').Replace('/', '+');

<a target="_blank" href="http://localhost:2817/[email protected]">
http://localhost:2817/[email protected]
</a>

и вы можете получить свои данные на стороне сервера, используя:

if (Request.QueryString["confirm"] != null && Request.QueryString["confirm"].ToString() != "")
{
       string confirm = HttpUtility.HtmlDecode(Request.QueryString["confirm"]).Replace('_', '+').Replace('-', '/');
}

Ответ 4

Я использовал 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('-', '=');
}