2017-01-02 3 views
1

В настоящее время я работаю с подтверждением электронной почты после регистрации с помощью 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)); 

результат выглядит следующим образом:

https://localhost/#/account/AQAAANCMnd8BFdERjHoAwE%2fCl%2bsBAAAA6gbQhGTTMUWVHDgOwC9T9AAAAAACAAAAAAAQZgAAAAEAACAAAAAqo%2fiAv8iIn7Zox9pS3MOUMVNisAo7Bnada6%2f9wKEe6wAAAAAOgAAAAAIAACAAAABUu7WkD9vHvN2EDz2%2bqGwvJ4j6gj%2f4PaBTbI861jfEcWAAAADJV74LZjKAXv5v1FqYVuWLyTpPBCnLfopSi3rsEEwMHFKwltHL3moL2h%2fvYVs%2fu3LB%2br5Qytuu%2fZYOUWQTY5KzBqHeZoi7RJ02emDI0NTRhIKxfSGGIdbYxuAjsW14G0BAAAAACsC8L%2bdUDzFMgKUOkxWhKofAz8L0mH5VFEt8Oq%2fKYsxIiu4fiA2sGlPfDhhKQnV2lg%2ba8qHydUjqmyfxNex0Pg%3d%3d/setup

, но когда я открываю этот адрес в браузере я получаю:

enter image description here ... и так далее!

То, что я вижу, что URL правильно закодированы в теле письма, но декодируется, когда я открываю его в браузере, заменив кодированный «% 2f» к «/». Это приводит к неверному маршруту в моем приложении, поскольку я ожидаю, что «/» будет разделителем между разными ресурсами.

Любые мысли о таком поведении?

Ссылки:

Another guy with my problem too

+2

Когда вы контролируете, что происходит с этим токеном в вашем приложении, вы можете просто его дважды закодировать, например, с base64 или hex, а затем добавить дополнительный шаг декодирования до того, как приложение обработает его. – dlatikay

+0

Умм ... звучит хорошо! Вы говорите, что, вероятно, если я изменю свой «% 2f» на какой-то другой символ base64, у меня не будет этой проблемы. Я мог проверить это !! :) –

ответ

3

Это, вероятно, его расшифровке, потому что он считает, что часть пути.

Я предлагаю вам явно рассматривать его как параметр. Это скажет браузеру не расшифровать его. Например, вместо того, чтобы этот путь:

https://localhost/#/account/AQAAANCMnd8BFdERjHoAwE%2fCl%2bsBAAAA6gbQh ..........

Используйте этот путь:

https://localhost/#/account/?t=AQAAANCMnd8BFdERjHoAwE%2fCl%2bsBAAAA6gbQh ......

Обратите внимание на добавление ?t= после окончания пути учетной записи.

Затем используйте приложение t в своем приложении. Это скажет браузеру, что значение в конце не должно быть декодировано как часть пути, а скорее сохранено в кодированной форме, потому что это параметр.

Это, очевидно, изменит путь, который у вас есть (из-за части установки), поэтому настройте соответствующим образом.

+0

Спасибо большое Хуан! Это работало очень хорошо ... –

 Смежные вопросы

  • Нет связанных вопросов^_^