第一种是在页面global.asax中,相关代码如下:

View Code

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中,代码如下:

View Code

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;
        }

}

转载于:https://www.cnblogs.com/chendaoyin/archive/2013/01/27/2878629.html

C#关于伪静态页面的两种实现方法相关推荐

  1. java提交数据到另一个页面_JS实现把一个页面层数据传递到另一个页面的两种方式...

    由于之前面试,被问到过此问题,所以今天特意整理了一下.由于自己技术水平有限,若存在错误,欢迎提出批评. 本博客整理了两种方式从一个页面层向另一个页面层传递参数. 一. 通过cookie方式 1. 传递 ...

  2. vue 路由跳转页面打开新页面_vue-router跳转时打开新页面的两种方法

    vue-router跳转时打开新页面的两种方法 最近还是在痛苦的挣扎中 挣扎吧 记录一下在vue项目中如何实现跳转到一个新页面(一个比较简单又比较基础的问题了),有两个方法: 1.标签实现新窗口打开 ...

  3. jsp页面中include的两种使用方法

    jsp页面中include的两种使用方法 include有两种用法 <%@ include file="文件的绝对路径或者相对路径"%> <jsp:include ...

  4. Ext.Ajax.request和formPanel.getForm().submit()两种提交方法的异同:

    Ext.Ajax.request和formPanel.getForm().submit()两种提交方法的异同: 1. 相同点: a) 都是使用异步提交的方式: b) 默认都是使用POST方式来提交数据 ...

  5. HTML中label的两种使用方法

    如果您在 label 元素内点击文本,就会触发此控件.就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上. 有两种使用方法: 方法1: 1 <label for=&quo ...

  6. HTML5中aside标签的两种使用方法

    aside元素在网站制作中主要有以下两种使用方法 1)被包含在article元素中作为主要内容的附属信息部分,其中的内容可以是与当前文章有关的相关资料.名次解释,等等. <article> ...

  7. iOS学习——UITableViewCell两种重用方法的区别

    今天在开发过程中用到了UITableView,在对cell进行设置的时候,我发现对UITableViewCell的重用设置的方法有如下两种,刚开始我也不太清楚这两种之间有什么区别.直到我在使用方法二进 ...

  8. xp系统更新的服务器失败是怎么回事啊,xp系统显示“服务器错误500”的两种解决方法...

    xp纯净版系统在浏览网页的时候会遇到这样或者那样的错误,比如经常遇到404错误,503错误,怎么回事呢?这些都是HTTP的状态码,不同的状态码代表不同的错误类型,有些不常用的状态码便没有详细的记载,例 ...

  9. Win10禁用管理员帐户后无法进入的两种解决方法

    使用过Windows10系统的朋友都知道,它的默认用户账户是Administrator账户,因为这样操作起来会更方便.不过,一位朋友表示自己不小心将Administrator管理员账户给禁用了,导致无 ...

最新文章

  1. 【计算机视觉】EmguCV学习笔记(2)图像的载入、显示和输出
  2. DFA在C#中的实现:过滤敏感词
  3. sqlserⅴer随机函数_sql server 函数--rand() 生成整数的随机数
  4. 【图片服务器】搭建Nginx图片服务器
  5. 「云」发展的怎么样了?
  6. 大整数乘法c语言代码_大整数乘法
  7. 随机化快速排序+快速选择 复杂度证明+运行测试
  8. [Buzz Today]2012.09.01
  9. RedHat命令笔记
  10. Linux的系统程序包管理
  11. LayUI2.2.5中文离线文档(免费免费免费)
  12. 电脑复制,电脑复制粘贴,详细教您电脑不能复制粘贴怎么办
  13. 记某淘宝客软件分析拿库思路
  14. 已解决:[emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forb
  15. 从0基础学习Python(17)[面向对象三大特征[多态]]
  16. Anroid app版本更新
  17. 如何用NLP辅助投资分析?三大海外机构落地案例详解
  18. 苹果手机相机九宫格怎么设置_瞧不起iPhone相机?苹果手机5个逆天拍照功能,效果惊艳堪比单反...
  19. Windows下使用gFortran,VScode+MinGW
  20. jenkins部署流程图_jenkins怎样实现自动部署的流程图

热门文章

  1. tcp压测工具_【解决方案】性能压测及分析调优实践
  2. 平衡二叉树Python解法
  3. mysql.createpool_Node.js MySQL模块中mysql.createConnection和mysql.createPool有什么区别?
  4. linux lvm uuid绑定,LVM:“找不到具有uuid的设备”但是blkid找到了UUID
  5. delphi Oracle导出多个表,Oracle数据库自动备份工具(Delphi源码)
  6. matlab算线性方程解,MATLAB计算方法3解线性方程组计算解法.pptx
  7. 安卓手机反应越来越慢怎么办_安卓手机运行慢怎么办 只需几步轻松提升安卓手机速度...
  8. java带参数的构造方法_看了Java的Class的源码,我自闭了
  9. 如何估算代码量_没有量杯,没有称,如何估算碳水化合物?
  10. 「第四篇」电赛控制题可以准备一些什么?