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

时间:2022-09-14 12:21:49

第一种是在页面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; 

相关文章