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

ASP.NET Web Forms 4.0 雙向路由:表達式建構器實現 SEO 友善 URL 完整指南

     編輯:關於ASP.NET

ASP.NET 4.0 引入 **雙向路由**:不僅能將 /Product/Jerseys 導向 Product.aspx?category=Jerseys (入站),更能在頁面中用 <%$ RouteUrl:RouteName=Product, name=Jerseys %> 產生正確連結 (出站),徹底解耦 URL 與實體檔案。本文完整示範路由註冊、表達式建構器設定、頁面雙向使用、RouteData 取值與遷移建議。

路由註冊 (Global.asax)

void Application_Start()
{
    RouteTable.Routes.Add("Product",
        new Route("Product/{name}", 
            new PageRouteHandler("~/Product.aspx")));
    // 更多路由...
}

啟用雙向路由:註冊表達式建構器 (web.config)

<system.web>
  <compilation>
    <expressionBuilders>
      <add expressionPrefix="RouteUrl" 
           type="System.Web.Compilation.RouteUrlExpressionBuilder" />
      <add expressionPrefix="RouteValue" 
           type="System.Web.Compilation.RouteValueExpressionBuilder" />
    </expressionBuilders>
  </compilation>
</system.web>

頁面中雙向使用

出站:產生 URL (HyperLink, Anchor, Redirect)

<!-- HyperLink 控件 -->
<asp:HyperLink ID="hlJerseys" runat="server" 
    NavigateUrl="<%$ RouteUrl:RouteName=Product, name=Jerseys %>" 
    Text="Jerseys" />

<!-- 純 HTML 錨點 -->
<a href="<%$ RouteUrl:RouteName=Product, name=Jerseys %>">Jerseys</a>

<!-- 代碼後置 Redirect -->
Response.RedirectToRoute("Product", new { name = "Jerseys" });

入站:取得路由參數

// 方式 1:RouteData (推薦)
string name = RouteData.Values["name"] as string;

// 方式 2:RouteValue 表達式 (標記中)
<span>Category: <%$ RouteValue:name %></span>

// 方式 3:Page.RouteData (屬性封裝)
string name = Page.RouteData.Values["name"] as string;

完整範例:Product.aspx

<%@ Page Language="C#" %>
<html>
<body>
    <h1>產品分類: <%$ RouteValue:name %></h1>
    <ul>
        <li><a href="<%$ RouteUrl:RouteName=Product, name=Jerseys %>">Jerseys</a></li>
        <li><a href="<%$ RouteUrl:RouteName=Product, name=Shoes %>">Shoes</a></li>
    </ul>
</body>
</html>

進階:路由約束、預設值、區域

// 約束:name 僅允許字母
routes.Add("Product", new Route("Product/{name}",
    new RouteValueDictionary { { "name", "Jerseys" } }, // 預設值
    new RouteValueDictionary { { "name", "[a-zA-Z]+" } }, // 約束 Regex
    new PageRouteHandler("~/Product.aspx")));

// 區域註冊 (Area)
var areaRoute = new Route("Admin/{controller}/{action}/{id}",
    new RouteValueDictionary { { "area", "Admin" } },
    new MvcRouteHandler()); // 需 MVC 專案
routes.Add("Admin", areaRoute);

遷移建議:Web Forms → ASP.NET Core

Web Forms 4.0ASP.NET Core
RouteTable.Routes (靜態)app.MapControllerRoute / app.MapRazorPages (啟動配置)
PageRouteHandlerController Action / Razor Page
RouteUrlExpressionBuilderUrl.Action, Url.Page, LinkGenerator
RouteData.ValuesRouteData.Values / HttpContext.GetRouteValue

核心概念 **「URL 與處理邏輯解耦、雙向生成/解析」** 完全繼承並強化。

結語

ASP.NET 4.0 雙向路由讓 Web Forms 邁向現代化 URL 設計的關鍵一步:**表達式建構器** 橋接標記與路由引擎,**RouteValue/RouteUrl** 實現出站入站無縫切換。儘管 Web Forms 已進入維護模式,但此機制在存量系統 SEO 改造、漸進式遷移中極具價值。新專案請直接擁抱 ASP.NET Core 原生路由。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved