首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 取得網站根目錄絕對 URL 的通用方法

     編輯:ASP.NET 基礎

在產生郵件連結、站點地圖、Open Graph 標籤等情境下,需取得網站完整根網址(含 Scheme、Host、Port、應用程式路徑)。本文提供一個可重用的靜態屬性實作。

實作程式碼

public static class WebUtility
{
    /// <summary>
    /// 取得網站根目錄的絕對 Uri(例如 https://www.example.com/MyApp/)
    /// </summary>
    public static Uri AbsoluteWebRoot
    {
        get
        {
            var context = HttpContext.Current;
            if (context == null || context.Request == null)
                throw new InvalidOperationException("HttpContext.Current 不可用,請在 Web 請求上下文中呼叫。");

            var uriBuilder = new UriBuilder
            {
                Scheme = context.Request.Url.Scheme,
                Host = context.Request.Url.Host,
                Port = context.Request.Url.IsDefaultPort ? -1 : context.Request.Url.Port,
                Path = VirtualPathUtility.ToAbsolute("~/")
            };

            return uriBuilder.Uri;
        }
    }
}

使用範例

// 產生完整驗證連結
string verifyUrl = WebUtility.AbsoluteWebRoot + "Account/VerifyEmail?token=" + token;
// 結果:https://www.mysite.com/MyApp/Account/VerifyEmail?token=abc123

// 郵件範本中
string body = $@"請點擊以下連結驗證信箱:<a href='{verifyUrl}'>驗證</a>";

關鍵點解析

  • VirtualPathUtility.ToAbsolute("~/") 正確解析應用程式虛擬路徑(含尾端 /),無論網站部署於根目錄或虛擬目錄皆正確。
  • UriBuilder 自動處理預設埠號(80/443)不顯示於 URL。
  • Scheme 自動偵測 http/https,支援負載平衡器卸載 SSL 的情境(需配合 Request.Headers["X-Forwarded-Proto"] 或 `ForwardedHeadersMiddleware`)。

ASP.NET Core 版本

public static class WebUtility
{
    public static string GetBaseUrl(this HttpRequest request)
    {
        return $"{request.Scheme}://{request.Host}{request.PathBase}/";
    }
}

// 使用
var baseUrl = HttpContext.Request.GetBaseUrl();

應用場景

  • 電子郵件/簡訊中的絕對連結
  • 社群分享 Open Graph 標籤 og:url
  • 站點地圖 sitemap.xml 產生
  • OAuth 重導向 URI 組裝
  • 跨子應用程式資源引用
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved