时间:2016-02-16 01:15 来源: 我爱IT技术网 作者:佚名
欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【C#中实现伪静态页面两种方式介绍】,下面是详细的讲解!
C#中实现伪静态页面两种方式介绍
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】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【ASP】ASP.NET中内嵌页面代码的一个问题-NET-内
- 【As】Asp.net中的页面乱码的问题-sp--pn-ne-et
- 【增加记录】asp.net中获取新增加记录的ID Access
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
