ASP.NET高效URL重写

40 篇文章 0 订阅
public class UrlRouteModule : IHttpModule
    {
        private static string URL_FLAG = "/q/"; //Url中区别路径和参数的分隔符
        private static string URL_SUFFIX = ".aspx"; //对哪种后缀的Url实施Rewrite

        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(context_BeginRequest);
        }

        private void context_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication app = sender as HttpApplication;
            if (app == null) return;

            string currentUrl = app.Context.Request.RawUrl;
            if (currentUrl.EndsWith(URL_SUFFIX, StringComparison.OrdinalIgnoreCase) == false) //后缀不符合的跳过
                return;

            int p = currentUrl.IndexOf(URL_FLAG, StringComparison.OrdinalIgnoreCase); //无参的也跳过
            if (p == -1) return;

            currentUrl = currentUrl.Substring(0, currentUrl.Length - URL_SUFFIX.Length); //去除后缀
            string url = string.Format("{0}.aspx", currentUrl.Substring(0, p));
            string query = FormmatUrlToQuery(currentUrl.Substring(p + URL_FLAG.Length));

            app.Context.RewritePath(url, string.Empty, query);
        }

        private string FormmatUrlToQuery(string url)
        {
            int j = 0; //计数器
            int len = url.Length;
            char[] chars = new char[len];

            for (int i = 0; i < len; i++)
            {
                if (url[i] != '/')
                    chars[i] = url[i];
                else
                {
                    if (++j % 2 == 1)
                        chars[i] = '=';
                    else
                        chars[i] = '&';
                }
            }

            return new string(chars);
        }

        public void Dispose() { }
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值