Я пытаюсь настроить токены сброса с помощью пользовательской страницы Blazor. Генерация токенов работает просто отлично, используя
var code = await _userManager.GeneratePasswordResetTokenAsync(user);
. Он сгенерировал следующий код
CfDJ8HVZ73lJc0lGiTBiTdeoRRd//Zc1LM0Q4P+8t7DLaBzwlQ2DuvY2HQ5CWE/E8b3VdlZZYIelpwwrCFz579CeCcQTf+YIPli7KpPTuUpMcTHDs5pAw3XifV7x+5Y/Q6WAPdixXuHE8We9QQRxl7Hnba2vjoJ5fCZ9FMHKpkOq3mxDhgYi/gba2Vse3/R87ztVrisEguYvYQ8h5f2MAVMiCB+H0TakjKjpj2ANAD9wQ2H8
Для отправки по почте требуется кодировка, как можно увидеть на по этой ссылке , давая мне
var callbackUrl = _globals.AppUrl
+ "/user/reset/"
+ System.Web.HttpUtility.UrlEncode(code);
Теперь письмо успешно отправлено, а URL успешно закодирован. Однако при открытии страницы я получаю сообщение об ошибке 404.11
The request filtering module is configured to deny a request that contains a double escape sequence.
Объявление страницы:
@page "/user/reset/{Code}"
Пример URL:
https://localhost:44303/user/reset/CfDJ8HVZ73lJc0lGiTBiTdeoRRfumtSdRgb46HPXLklW0j42IyjqN8rv%2fapJG158YfIrR7dVRNRF2YxJydegd2CMlvm93FTcjkuBwnVPC3N9AtSigiy8VOqeW1nNrRth73urJ23D0V6M2c%2fzE1%2bTuFs8KbB%2fnCG5CE3UnFXG5HleeA%2fwtlyzLgbP4Zrbi5XZ4Q0w4%2b1j83J%2fXvQUqg%2fO5raSkmcO3cb1TGnDWz%2fwqxW%2fbNOe
Вопрос
Включает ли ASP Core Identity символы, которые не могут быть отправлены по электронной почте по умолчанию? (Я бы взял символ «+»). И можем ли мы тогда исключить из поколения? Или есть другой способ манипулирования URL, предотвращающий эту ошибку. Я предпочитаю оставлять фильтр двойных escape-символов включенным, так как он повышает безопасность
Редактировать
При кодировании всего URL-адреса следующим образом:
var callbackUrl = _globals.AppUrl
+ "/user/reset/"
+ code;
callbackUrl = HtmlEncoder.Default.Encode(callbackUrl);
Возникает ошибка 404, потому что код содержит «/», что не соответствует моей маршрутизации