Angular 路由器:将旧系统 URL 重定向到新系统 URL
Angular Router: Redirect Old System URL to New URL
使用 Angular 12+
我们的旧系统有 ASPX 页面和不同的查询字符串值。我们的新系统基于 Angular,因此 ASPX 页面 links/query 字符串不再存在。有没有办法扩展路由器,以便在 ASPX 页面请求到来时将其重定向到一组已转换的查询参数和正确的 Angular 路由?会有大量排列,因此我们需要通过逻辑重写器 运行 URL,而不仅仅是路由器映射。
现在,我有一个 404Component 查看 URL,然后决定新的 URL,并进行重定向。
客户将旧的 ASPX 页面添加为书签,因此需要支持。
您需要一个基于 CanActivate
Guard
的实现
创建一个重定向服务,它将确定 URL 重定向和 return URL 最终目的地 URL(下面的示例实现)
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanDeactivate } from '@angular/router';
@Injectable()
export class RedirectGuard implements CanActivate {
constructor(public router: Router) {}
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
const originalRequestUrl = state.url;
if(this.isOldUrl(originalRequestUrl)) {
this.router.navigate([this.getRedirectUrl(originalRequestUrl)]);
return false;
}
return true;
}
isOldUrl(url: string): boolean {
// pattern check on URL to determine if url needs redirect
return true;
}
getRedirectUrl(url: string): string {
// logic to return redirect-url of final destination
// returning same url for now
return url;
}
}
将此地图添加(或替换)到您的路由器地图(捕获所有地图定义)
{
path: '**',
canActivate: [ RedirectGuard ],
redirectTo: '/'
}
现在,任何不匹配的 URL (**
) 现在应该由 RedirectGuard
服务解决 class
使用 Angular 12+
我们的旧系统有 ASPX 页面和不同的查询字符串值。我们的新系统基于 Angular,因此 ASPX 页面 links/query 字符串不再存在。有没有办法扩展路由器,以便在 ASPX 页面请求到来时将其重定向到一组已转换的查询参数和正确的 Angular 路由?会有大量排列,因此我们需要通过逻辑重写器 运行 URL,而不仅仅是路由器映射。
现在,我有一个 404Component 查看 URL,然后决定新的 URL,并进行重定向。
客户将旧的 ASPX 页面添加为书签,因此需要支持。
您需要一个基于 CanActivate
Guard
创建一个重定向服务,它将确定 URL 重定向和 return URL 最终目的地 URL(下面的示例实现)
import { Injectable } from '@angular/core';
import { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, CanDeactivate } from '@angular/router';
@Injectable()
export class RedirectGuard implements CanActivate {
constructor(public router: Router) {}
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
const originalRequestUrl = state.url;
if(this.isOldUrl(originalRequestUrl)) {
this.router.navigate([this.getRedirectUrl(originalRequestUrl)]);
return false;
}
return true;
}
isOldUrl(url: string): boolean {
// pattern check on URL to determine if url needs redirect
return true;
}
getRedirectUrl(url: string): string {
// logic to return redirect-url of final destination
// returning same url for now
return url;
}
}
将此地图添加(或替换)到您的路由器地图(捕获所有地图定义)
{
path: '**',
canActivate: [ RedirectGuard ],
redirectTo: '/'
}
现在,任何不匹配的 URL (**
) 现在应该由 RedirectGuard
服务解决 class