[英]Validate URL Parameters on Every Route Change and Redirect
我正在開發一個應用程序,其中大多數 URL 都以幾個動態參數開頭。 是這樣的:
https://projects/:projectId/:subProjectId/<service>/..
但是,目前沒有對這些 ID 進行驗證,我正在尋找一種適當的方法來攔截、驗證和重新路由(如果無效)每次導航更改。 基本上我想解析 URL(使用route.paramMap
或類似的),查詢后端數據庫以檢查 ID 是否存在,如果不存在則重新路由到“未找到”頁面。
我知道有幾種方法可以檢查路線更改,但我不確定這種情況下正確的方法是什么。 我可以訂閱路由事件或做類似的事情:
<router-outlet (activate)="changeOfRoute()"></router-outlet>
然而,這感覺不正確,因為我並沒有真正在導航開始之前攔截路線更改和驗證/重定向。 我還可以使用路由解析器:
resolve: { resolver: IdValidationResolverService}
這不是很實用,因為我需要確保在每條路線上都使用解析器並且它是孩子,而不是讓全局的東西適用於每個導航更改。
我可以使用一些輸入來正確處理這個問題。
我認為你需要的是Guard
,例如:
@Injectable({
providedIn: 'root'
})
export class IdValidatorGuard implements CanActivate {
constructor(private http: HttpClient, private router: Router) {}
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean |
UrlTree {
const id = next.paramMap.get('id');
return this.http.get(`api/validateId/${id}`).pipe(
map(result => {
if (result) {
return true;
} else {
this.router.navigate(['/404']);
return false;
}
})
);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.