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);
            }
        }
    }
  • 相关阅读:
    mac上python3安装HTMLTestRunner
    双目深度估计传统算法流程及OpenCV的编译注意事项
    深度学习梯度反向传播出现Nan值的原因归类
    1394. Find Lucky Integer in an Array
    1399. Count Largest Group
    1200. Minimum Absolute Difference
    999. Available Captures for Rook
    509. Fibonacci Number
    1160. Find Words That Can Be Formed by Characters
    1122. Relative Sort Array
  • 原文地址:https://www.cnblogs.com/fang-beny/p/3567541.html
Copyright © 2011-2022 走看看