zoukankan      html  css  js  c++  java
  • URL Rewrite

    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);
            }
        }
    }
  • 相关阅读:
    Java 排序(快排,归并)
    Java 编译???
    装箱 拆箱
    Integer-->String String-->Integer
    java 内部类
    Java 反射机制
    Java 多态的实现机制
    一个句子,找出最字符最少的关键词
    重载、重写
    数组有没有length()这个方法? String有没有length()这个方法?
  • 原文地址:https://www.cnblogs.com/fang-beny/p/3567541.html
Copyright © 2011-2022 走看看