訪問 www.xxx.com/welcome 實際執行 welcome.aspx,同理 /product → product.aspx,隱藏 .aspx 後綴,實現 REST 風格友好 URL。
Global.asax.cs
using System.Web.Routing;
public class Global : System.Web.HttpApplication {
void Application_Start(object sender, EventArgs e) {
RegisterRoutes(RouteTable.Routes);
}
void RegisterRoutes(RouteCollection routes) {
// 忽略 .axd 等資源
routes.Ignore("{resource}.axd/{*pathInfo}");
// 映射規則:/welcome -> ~/welcome.aspx
routes.MapPageRoute("WelcomeRoute", "welcome", "~/welcome.aspx");
routes.MapPageRoute("ProductRoute", "product", "~/product.aspx");
routes.MapPageRoute("AboutRoute", "about", "~/about.aspx");
// 通用規則 (可選):/{page} -> ~/{page}.aspx
// routes.MapPageRoute("DynamicRoute", "{page}", "~/{page}.aspx",
// false, new RouteValueDictionary { { "page", "welcome" } });
}
}
頁面中生成連結:Page.GetRouteUrl("WelcomeRoute", null) 或 ResolveUrl("~/welcome")。
安裝 URL Rewrite 2.0+,在 web.config 中:
<system.webServer>
<rewrite>
<rules>
<rule name="HideAspxExtension" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}.aspx" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="{R:1}.aspx" />
</rule>
</rules>
</rewrite>
</system.webServer>
效果:/welcome → 內部重寫到 /welcome.aspx,瀏覽器地址欄保持 /welcome。
// Program.cs / Startup.cs
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Welcome}/{id?}");
// 對應 Controllers/HomeController.cs -> public IActionResult Welcome() => View();
<form runat="server"> 的 action 會自動變回 .aspx。解決:form.Action = Request.RawUrl; 在 Page_Load 中設置。ResolveUrl("~/Content/style.css") 或根路徑 /Content/style.css。web.config <location path="welcome"> 需匹配路由 URL 而非物理文件。web.config。