簡體   English   中英

在每次路由更改和重定向時驗證 URL 參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM