类别:程序开发
日期:2020-03-30 浏览:2095 评论:0
第一种是在页面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; } }
本文标题:C#关于伪静态页面的两种实现方法
本文链接:https://vtzw.com/post/131.html
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。
发表评论 / 取消回复