您的位置:首页 > 编程语言 > C#

C#中实现伪静态页面两种方式介绍

2013-01-27 00:00 776 查看
第一种是在页面global.asax中,相关代码如下
void Application_BeginRequest(object sender, EventArgs e) 
{ 
HttpContext context = ((HttpApplication)sender).Context; 
string oldurl = context.Request.Path.ToLower(); 
if ( ( oldurl.IndexOf("-") > 0 && oldurl.IndexOf(".") == -1) || (oldurl.IndexOf("-") > 0 && oldurl.IndexOf("aspx") > 0) ) 
{ 
string[] url = oldurl.Substring(oldurl.LastIndexOf("/") + 1).Replace(".aspx", "").Split('-'); 
string path = oldurl.Substring(0, oldurl.LastIndexOf("/") + 1); 
//file 
string file = url[0]; 
file = file.Replace("about", "detail"); 
file = file.Replace("news", "list"); 
file = file.Replace("down", "detail"); 
file = file.Replace("case", "album"); 
file = file.Replace("contact", "detail"); 
//query 
string query = ""; 
for ( int i=1;i<url.Length;i++ ) 
{ 
if (url[i] != "") 
{ 
switch (i) 
{ 
case 1: 
query += "id=" + url[i]; 
break; 
case 2: 
query += "&page=" + url[i]; 
break; 
case 3: 
query += "&key=" + url[i]; 
break; 
case 4: 
query += "&v1=" + url[i]; 
break; 
case 5: 
query += "&v2=" + url[i]; 
break; 
case 6: 
query += "&v3=" + url[i]; 
break; 
case 7: 
query += "&v4=" + url[i]; 
break; 
case 8: 
query += "&v5=" + url[i]; 
break; 
case 9: 
query += "&v6=" + url[i]; 
break; 
case 10: 
query += "&v7=" + url[i]; 
break; 
} 
} 
} 
//newurl 
string newurl = path + file + ".aspx?" + query; 
if( context.Request.ServerVariables["QUERY_STRING"] != null && context.Request.ServerVariables["QUERY_STRING"] != "" ) 
newurl += "&" + context.Request.ServerVariables["QUERY_STRING"]; 
//Response.Write(newurl); 
context.RewritePath(newurl); 
}

第二种方法是在HttpModule.cs中,代码如下
public class HttpModule : IHttpModule 
{ 
private const RegexOptions regexOptions = RegexOptions.IgnoreCase | RegexOptions.Compiled; 
private static readonly Regex regexFileName = new Regex(@".*?/([^./]*)\.aspx(.*)", regexOptions); 
private static readonly Regex regexRewritePath = new Regex(@"^.*?/(\w*)(-?(\w+)-([\w,\|,%]+))+\.aspx", regexOptions); 
public void Dispose() 
{ 
} 
public void Init(HttpApplication httpApplication) 
{ 
httpApplication.BeginRequest += ReUrl_BeginRequest; 
} 
private static void ReUrl_BeginRequest(object sender, EventArgs e) 
{ 
Globals.Catch( 
() => 
{ 
var context = ((HttpApplication)sender).Context; 
var request = context.Request; 
var url = request.Url; 
if (!VerifyUrl(url)) 
{ 
string input = url.PathAndQuery.ToLower(); 
//Loger.Debug("PathAndQuery-->" + input); 
//Loger.Debug("AbsolutePath-->" + url.AbsolutePath); 
//Loger.Debug("AbsoluteUri-->" + url.AbsoluteUri); 
//Loger.Debug("DnsSafeHost-->" + url.DnsSafeHost); 
//Loger.Debug("LocalPath-->" + url.LocalPath); 
//Loger.Debug("AppDomain.CurrentDomain.BaseDirectory-->" + AppDomain.CurrentDomain.BaseDirectory); 
//Loger.Debug("Globals.GlobalsVirtualFilePath-->" + Globals.GlobalsVirtualFilePath); 
if (input.StartsWith(Globals.GlobalsVirtualFilePath)) 
input = input.Remove(0, Globals.GlobalsVirtualFilePath.Length); 
string viewmode = Globals.ViewMode; 
var themeName = request.QueryString["theme"] ?? ""; 
if (string.IsNullOrEmpty(themeName)) 
{ 
themeName = Globals.ThemeName; 
} 
if (input == "/") 
input = "/index.aspx"; 
if (viewmode == "Rewrite") 
{ 
Loger.Debug("now input-->" + input); 
Match match = regexRewritePath.Match(input); 
if (match.Success && match.Groups.Count == 5) 
{ 
var captures3 = match.Groups[3].Captures; 
var captures4 = match.Groups[4].Captures; 
var itemCount = match.Groups[3].Captures.Count; 
var list = new List<string>(); 
for (var i = 0; i < itemCount; i++) 
{ 
list.Add(string.Concat(captures3[i].Value, "=", captures4[i].Value)); 
} 
context.RewritePath(Globals.AspxFileUrl(themeName, match.Groups[1].Value + ".aspx?" + string.Join("&", list.ToArray()))); 
return; 
} 
} 
var fileName = regexFileName.Match(request.Path.ToLower()).Groups[1].ToString(); 
if (string.IsNullOrEmpty(fileName)) 
return; 
new ConvertTheme(context) 
{ 
ThemeName = themeName, 
ViewMode = viewmode 
}.Display(fileName); 
} 
}); 
} 
private static bool VerifyUrl(Uri uri) 
{ 
var url = uri.AbsolutePath.ToLower(); 
if (url.StartsWith(Globals.GlobalsVirtualFilePath)) 
url = url.Remove(0, Globals.GlobalsVirtualFilePath.Length); 
return uri.IsFile 
|| url.IndexOf("site") != -1 
|| url.IndexOf("sys") != -1 
|| url.IndexOf("html") != -1 
|| url.IndexOf("user") != -1 
|| url.IndexOf("bbs") != -1 
|| url.IndexOf("_module.aspx") != -1 
|| url.IndexOf("webresource.axd") != -1 
|| url.IndexOf("scriptresource.axd") != -1; 
} 
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: