Я пытаюсь выполнить функцию восстановления пароля. URL-адрес для сброса пароля содержит параметр электронной почты и токен (который генерируется с помощью функции идентификации ядра dotnet GeneratePasswordResetTokenAsync (TUser)).
Теперь проблема заключается в том, что всякий раз, когда этот URL сброса загружается в браузер, он выдает: RangeError: Превышен максимальный размер стека вызовов
Снимок экрана прилагается
Чтобы выявить проблему, я удалил токен из URL-адреса и жестко закодировал переменную внутри кода, чтобы увидеть результаты, но он работал отлично, без исключений, что когда-либо.
Более того, в компоненте нет циклической зависимости, которая могла бы вызвать проблему. Я не понимаю, что является причиной этой проблемы.
скриншот прилагается
PS: я использую Angular 7 на переднем конце и C # на заднем плане
РЕДАКТИРОВАТЬ : при дальнейшем расследовании я обнаружил, что исключение возникает всякий раз, когда токен содержит либо (% 2) между строкой токена {когда я кодирую URL с помощью 'System. Web.HttpUtility "} ИЛИ / {когда я не выполняю кодирование}
См. Изображение
Есть ли ограничения по URL? Фрагмент кода из app.component.ts
setTimeout(() => {
if (this.isUserLoggedIn) {
this.alertService.resetStickyMessage();
this.checkAvailableStocks();
if (this.isUserLoggedIn && this.UserRole == 'Worker/Staff' && !this.storageManager.getData(DBkeys.SELECTED_COMPANY)) {
let dialogRef = this.dialog.open(CompanyDialogeComponent, {
//width: '800px',
data: {},
disableClose: true
});
dialogRef.afterClosed().subscribe(result => {
});
}
//if (!this.authService.isSessionExpired)
this.alertService.showMessage("Login", `Welcome back ${this.userName}!`, MessageSeverity.default);
//else
// this.alertService.showStickyMessage("Session Expired", "Your Session has expired. Please log in again", MessageSeverity.warn);
}
}, 2000);
this.alertService.getDialogEvent().subscribe(alert => this.showDialog(alert));
this.alertService.getMessageEvent().subscribe(message => this.showToast(message, false));
this.alertService.getStickyMessageEvent().subscribe(message => this.showToast(message, true));
this.authService.reLoginDelegate = () => this.shouldShowLoginModal = true;
this.authService.getLoginStatusEvent().subscribe(isLoggedIn => {
this.isUserLoggedIn = isLoggedIn;
if (this.isUserLoggedIn) {
this.initNotificationsLoading();
}
else {
this.unsubscribeNotifications();
}
setTimeout(() => {
if (!this.isUserLoggedIn) {
this.alertService.showMessage("Session Ended!", "", MessageSeverity.default);
}
}, 500);
});
this.router.events.subscribe(event => {
if (event instanceof NavigationStart) {
let url = (<NavigationStart>event).url;
if (url !== url.toLowerCase()) {
this.router.navigateByUrl((<NavigationStart>event).url.toLowerCase());
}
}
});