今天,群裡有人問我關於Url重寫的問題,想這重寫,記得國慶期間看過相關文章,msdn介紹也看過,大概就三種方法,最常用的就是用微軟提供的dll檔案,今天,把我dll引用了一下,按著說明配置了一下檔案,結果出現不少問題,調試時找不到.cs原始碼,不知是啥問題,可能dll放的太久,生秀了..-_-.#,只好上網再搜一下新的dll,突然發現2.0裡的新方法!花了半個晚上做一個demo!
以下是demo原始碼: 項目裡只有兩個頁面(Default.aspx,user.aspx(直接response.write(request.querystring["userId"]))
protected void Application_BeginRequest(object sender, EventArgs e)
{
string suffixUrl, lastUrl, newurl = string.Empty, userId = string.Empty ;
lastUrl = Request.RawUrl;
if (lastUrl.Substring(0, 11).ToLower() == "/urlrewrite")//"urlrewirte是根目錄名,加判斷的原因是本地測試時
{ //被取出來,上傳到伺服器時根目錄會被網域名稱取代(消失)!
suffixUrl = lastUrl.Substring(12).ToLower();
}
else
{
suffixUrl = lastUrl.Substring(1).ToLower();
}
bool isMatch = false;
Regex myReg = new Regex(@"user/([\w\d]+)\.aspx");
if (myReg.IsMatch(suffixUrl))
{
isMatch = true;
int first=suffixUrl.LastIndexOf('/')+1;
int end=suffixUrl.LastIndexOf('.');
int lenght=end-first;
userId=suffixUrl.Substring(first,lenght);//擷取被匹配的組部分
}
if (isMatch)
{
newurl="~/user.aspx?userId="+userId;
}
else
{
newurl = "~/Default.aspx";
}
HttpContext.Current.RewritePath(newurl); //最關鍵的一句話,重寫Url
}
測試輸入:http://xxx/urlrewrite/usre/cyq1162.aspx(地址欄顯示)
成功定向到:http://xxx/urlrewrite/user.aspx?userid=cyq1162(頁面內容顯示)
..很簡單吧..不用引入dll,也不用配置Webconfig.輕鬆的幾行代碼搞定!