@@ -2,51 +2,23 @@ namespace Masa.Stack.Components;
22
33internal static class NavigationUrlHelper
44{
5- public static string BuildHref ( string ? url , string projectPrefix , Uri currentUri )
5+ /// <summary>
6+ /// 相对路径会按 <paramref name="projectPrefix"/> 补全;以 http:// 或 https:// 开头的菜单 URL 原样返回,由浏览器处理。
7+ /// </summary>
8+ public static string BuildHref ( string ? url , string projectPrefix )
69 {
710 if ( string . IsNullOrEmpty ( url ) )
811 {
912 return projectPrefix ;
1013 }
11-
12- if ( TryBuildHrefFromAbsoluteUrl ( url , projectPrefix , currentUri , out var absoluteHref ) )
13- {
14- return absoluteHref ;
15- }
16-
17- return BuildHrefFromRelativeUrl ( url , projectPrefix ) ;
18- }
19-
20- private static bool TryBuildHrefFromAbsoluteUrl ( string url , string projectPrefix , Uri currentUri , out string href )
21- {
22- href = string . Empty ;
23-
24- if ( ! url . StartsWith ( "http://" , StringComparison . OrdinalIgnoreCase ) &&
25- ! url . StartsWith ( "https://" , StringComparison . OrdinalIgnoreCase ) )
26- {
27- return false ;
28- }
2914
30- if ( ! Uri . TryCreate ( url , UriKind . Absolute , out var absoluteUri ) )
15+ if ( url . StartsWith ( "http://" , StringComparison . OrdinalIgnoreCase ) ||
16+ url . StartsWith ( "https://" , StringComparison . OrdinalIgnoreCase ) )
3117 {
32- return false ;
33- }
34-
35- if ( ! IsSameOrigin ( absoluteUri , currentUri ) )
36- {
37- href = url ;
38- return true ;
18+ return url ;
3919 }
4020
41- href = EnsureProjectPrefix ( absoluteUri . PathAndQuery + absoluteUri . Fragment , projectPrefix ) ;
42- return true ;
43- }
44-
45- private static bool IsSameOrigin ( Uri targetUri , Uri currentUri )
46- {
47- return string . Equals ( targetUri . Host , currentUri . Host , StringComparison . OrdinalIgnoreCase ) &&
48- targetUri . Port == currentUri . Port &&
49- string . Equals ( targetUri . Scheme , currentUri . Scheme , StringComparison . OrdinalIgnoreCase ) ;
21+ return BuildHrefFromRelativeUrl ( url , projectPrefix ) ;
5022 }
5123
5224 private static string BuildHrefFromRelativeUrl ( string url , string projectPrefix )
0 commit comments