=x= 🌵 網址顯示方式管理。
📌 如果仔細觀察網址,可以發現平常瀏覽的網頁並不會出現副檔名,但是用 Visual Studio 跑出來的網頁都會有副檔名,而且網址就是資料夾的名稱跟檔名的組合,今天要介紹的就是使用全域應用程式類別 Global.asax 來進行網址的管理,如何設定不顯示副檔名,以及用來自訂短網址的製作方式。
👀 短網址案例 : Accupass 設定活動頁面短網址
👀 Global.asax 介紹 : Global.asax 文件是什麼
👀 應用程序生命週期概述 : ASP.NET Application Life Cycle Overview for IIS 5.0 and 6.0
👀 Global.asax 官網說明 : Global.asax Syntax
👀 Route 路由官網說明 : 終極 ASP.NET: 使用 ASP.NET Web 表單路由
protected void Application_Start(object sender, EventArgs e)
{
// 設定不顯示副檔名 (如果只想隱藏副檔名做到此區塊就好)
var routes = RouteTable.Routes;
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);
// 執行短網址路由方法
RegisterRouters(RouteTable.Routes);
}
void RegisterRouters(RouteCollection routes)
{
// MapPageRoute("自訂路由名稱", "替換後的網址區塊", "原本實際執行的網頁位置")
// {shortUrl} 為短網址名稱,可以視為之後要用來抓取的參數
routes.MapPageRoute("shortUrlRoute", "ShowList/{shortUrl}", "~/Tayanahtml/dealers.aspx");
//可以建立多個規則
}
//取得網址傳值的 id 內容
string urlIDStr = Request.QueryString["id"];
SqlConnection connection = new SqlConnection(WebConfigurationManager.ConnectionStrings["TayanaYachtConnectionString"].ConnectionString);
//如果是用短網址連入則用短網址 shortUrl 參數內容的國家名稱來判斷 ID
if (Page.RouteData.Values.Count > 0) {
//取得短網址參數內容的國家名稱
string urlCountryStr = Page.RouteData.Values["shortUrl"].ToString();
string sqlID = "SELECT id FROM CountrySort WHERE countrySort = @urlCountryStr";
SqlCommand commandID = new SqlCommand(sqlID, connection);
commandID.Parameters.AddWithValue("@urlCountryStr", urlCountryStr);
connection.Open();
SqlDataReader readerID = commandID.ExecuteReader();
if (readerID.Read()) {
urlIDStr = readerID["id"].ToString();
}
connection.Close();
}
//如無網址傳值則設為第一筆國家名稱 id
if (string.IsNullOrEmpty(urlIDStr)) {
string sql = "SELECT TOP 1 id FROM CountrySort";
SqlCommand command = new SqlCommand(sql, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
if (reader.Read()) {
urlIDStr = reader["id"].ToString();
}
connection.Close();
}
//將 id 存入 Session 使用
Session["id"] = urlIDStr;
//下方依取得 ID 正常進行讀取內容及修改
//原網址-https://localhost:44305/Tayanahtml/dealers?id=1
//短網址-https://localhost:44305/ShowList/USA
//上面兩個網址會得到相同網頁內容
//圖片位置修改方式1 : (用後置程式碼 .aspx.cs 送出 Html 也適用)
<img src="../Tayanahtml/images/newbanner.jpg" />
//圖片位置修改方式2 : (僅 .aspx 頁面適用)
<img src="<%= VirtualPathUtility.ToAbsolute("~/Tayanahtml/images/newbanner.jpg") %>" />
👺 不建議使用 Page.ResolveUrl(),會有被攻擊的風險。
👀 ResolveUrl 的 XSS 攻擊模式參考 : All is XSS that comes to the .NET
👀 VirtualPathUtility.ToAbsolute() 官網介紹 : VirtualPathUtility.ToAbsolute 方法
📢 原本是在試 Accupass 設定活動頁面短網址這種活動功能,嘗試去理解它是怎麼做到的,測試成功之後就把它用到專案裡面,算是專案製作的小彩蛋,在新建 Global.asax 檔時,發現預設還有很多種事件可以使用,如果有 Global.asax 相關的應用歡迎留言討論,對應用十分好奇,因為感覺可以做到很多事,感謝!
.aspx內的解網址不要使用 Page.ResolveUrl()
,已經被證實有資安風險。
請改用 VirtualPathUtility.ToAbsolute()
。
感謝提醒!!已爬文修正!!