手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >C#中实现伪静态页面两种方式介绍
C#中实现伪静态页面两种方式介绍
摘要:第一种是在页面global.asax中,相关代码如下:复制代码代码如下:voidApplication_BeginRequest(objec...

第一种是在页面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#中实现伪静态页面两种方式介绍】相关文章:

asp.net显示自己的网页图标的几种方式

C#语言初级入门介绍

用CSS实现图片倾斜 只支持IE

ASP.NET中实现模板页

控件开发时两种JS嵌入资源方式的使用方法

简单理解Web Service三种实现方式

ASP.NET中 Execl导出的六种方法实例

在asp.net下实现Option条目中填充前导空格的方法

ASP.NET中实现把form表单元素转为实体对象或集合

程序中常用的种代码

精品推荐
分类导航