首页 > 其他 > 详细

URL Rewrite

时间:2014-02-26 11:27:33      阅读:281      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
using System;
using System.IO;
using System.Threading;
using System.Web;

using Com.Website.Configuration;
using Com.Website.WebModel.Resource;
using Com.Website.DomainModel;

namespace Com.Website.HttpModule.UrlRewriter
{
    /// <summary>
    /// Url rewrite http module
    /// </summary>
    public class UrlRewriteHttpModule : IHttpModule
    {
        private UrlHelper urlHelper;
        private RewriteRuleCollection rewriteRuleList = new RewriteRuleCollection();

        public UrlRewriteHttpModule()
        {
            this.urlHelper = new UrlHelper();
        }

        #region IHttpModule Members

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

        public void Dispose()
        {

        }

        #endregion

        private void InitialSetting()
        {
            rewriteRuleList.Clear();
            foreach (RewriteSetting rewriteSetting in ConfigurationManager.UrlRewriterConfiguration.RewriteConfiguration.RewriteSettingCollection)
            {
                RewriteRule rewrite = null;
                string providerName = rewriteSetting.Provider;
                if (string.IsNullOrEmpty(providerName))
                {
                    rewrite = UrlRewrite.CreateRewriteRule();
                }
                else
                {
                    rewrite = UrlRewrite.CreateRewriteRule(providerName);
                }
                rewrite.Initialize(rewriteSetting);
                rewriteRuleList.Add(rewrite);
            }
        }

        private void OnBeginRequest(object sender, EventArgs e)
        {
            HttpApplication application = sender as HttpApplication;

            if (File.Exists(application.Request.PhysicalPath)) return;

            if (!(ConfigurationManager.BizConfiguration != null 
                    && ConfigurationManager.UrlRewriterConfiguration != null
                    && ConfigurationManager.UrlRewriterConfiguration.RewriteConfiguration != null
                    && ConfigurationManager.UrlRewriterConfiguration.RewriteConfiguration.RewriteSettingCollection != null))
                return;

            string pageName = string.Empty;
            if (HttpContext.Current != null && 
                HttpContext.Current.Request != null &&
                HttpContext.Current.Request.Url != null)
            {
                pageName = HttpContext.Current.Request.Url.AbsolutePath;
            }
            PageUrlAlias currentAlias = PageUrlAlias.InvalidUrl;
            if (!string.IsNullOrWhiteSpace(pageName))
            {
                currentAlias = ConfigurationManager.WebPageConfiguration.GetPageUrlAlias(pageName);
            }

            if (ConfigurationManager.UrlRewriterConfiguration.ExceptPage != null
                && ConfigurationManager.UrlRewriterConfiguration.ExceptPage.Pages != null
                && ConfigurationManager.UrlRewriterConfiguration.ExceptPage.Pages.Exists(d => d == currentAlias))
            {
                return;
            }

            InitialSetting();
            string requestUrl = application.Request.RawUrl;
            string requestQuerystring = string.Empty;
            string virtualUrl = requestUrl;
            int pos = requestUrl.IndexOf(?);
            if (pos >= 0)
            {
                requestQuerystring = requestUrl.Substring(pos + 1);
                virtualUrl = requestUrl.Substring(0, pos);
            }
            virtualUrl = virtualUrl.TrimEnd(/);

            RewriteRule rewriteRule = rewriteRuleList.Find(new Predicate<RewriteRule>(delegate(RewriteRule rule) { return rule.IsRewrite(virtualUrl); }));
            if (rewriteRule == null) return;

            string destinationUrl = rewriteRule.RewriteUrl(virtualUrl);
            destinationUrl = urlHelper.JoinUrlParameter(urlHelper.HandleRootOperator(destinationUrl), requestQuerystring);

            HttpContext.Current.RewritePath(destinationUrl);
        }
    }
}
bubuko.com,布布扣

URL Rewrite

原文:http://www.cnblogs.com/fang-beny/p/3567541.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!