В настоящее время я работаю с подтверждением электронной почты после регистрации с помощью ASP.NET Identity.Браузер преобразует закодированную косую черту (% 2F) в литеральную косую черту (/) в части пути URL
Эта библиотека обеспечивает генерацию маркера, которая необходима для завершения регистрации. Этот маркер используется в нашем приложении по следующему пути:
https://localhost/#/account/{token}/setup
И маркер генерируется путем вызова:
var emailToken = _userManager.GenerateEmailConfirmationToken(newUser.Id);
После того, как у меня есть маркер генерируется, я добавляю его в пути, делая string.Format
таким образом:
string.Format("https://localhost/#/account/{0}/setup", HttpUtility.UrlEncode(emailToken));
результат выглядит следующим образом:
, но когда я открываю этот адрес в браузере я получаю:
То, что я вижу, что URL правильно закодированы в теле письма, но декодируется, когда я открываю его в браузере, заменив кодированный «% 2f» к «/». Это приводит к неверному маршруту в моем приложении, поскольку я ожидаю, что «/» будет разделителем между разными ресурсами.
Любые мысли о таком поведении?
Ссылки:
Another guy with my problem too
Когда вы контролируете, что происходит с этим токеном в вашем приложении, вы можете просто его дважды закодировать, например, с base64 или hex, а затем добавить дополнительный шаг декодирования до того, как приложение обработает его. – dlatikay
Умм ... звучит хорошо! Вы говорите, что, вероятно, если я изменю свой «% 2f» на какой-то другой символ base64, у меня не будет этой проблемы. Я мог проверить это !! :) –