类别:程序开发

日期:2020-03-30 浏览:1816 评论: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
作者授权:除特别说明外,本文由 零一 原创编译并授权 零一的世界 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。
 您阅读本篇文章共花了: 

 可能感兴趣的文章

评论区

发表评论 / 取消回复

必填

选填

选填

◎欢迎讨论,请在这里发表您的看法及观点。