zoukankan      html  css  js  c++  java
  • 解决MVC项目中,静态html 未找到时候,404的跳转

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Linq;
    using System.Web;
    using System.Web.Routing;
    
    namespace WebClientService.Modules
    {
        public class GateKeeperOfStaticHtml : IHttpModule
        {
            // Fields
            private static readonly object _contextKey = new object();
            private static readonly object _requestDataKey = new object();
            private RouteCollection _routeCollection;
    
    
            // Properties
            public RouteCollection RouteCollection
            {
                get
                {
                    if (this._routeCollection == null)
                    {
                        this._routeCollection = RouteTable.Routes;
                    }
                    return this._routeCollection;
                }
                set
                {
                    this._routeCollection = value;
                }
            }
    
    
    
            public void Init(HttpApplication application)
            {
    
                if (application.Context.Items[_contextKey] == null)
                {
                    application.Context.Items[_contextKey] = _contextKey;
                    application.PostResolveRequestCache += new EventHandler(this.OnApplicationPostResolveRequestCache);
                }
    
            }
    
       
    
            private void OnApplicationPostResolveRequestCache(object sender, EventArgs e)
            {
                HttpContextBase context = new HttpContextWrapper(((HttpApplication)sender).Context);
                this.PostResolveRequestCache(context);
            }
    
            /// <summary>
            /// 检测是否是合法的处理后缀类型
            /// </summary>
            /// <param name="toCheckedStr"></param>
            /// <returns></returns>
            private bool IsValidExtension(string toCheckedStr) {
                bool result = false;
                if (string.IsNullOrEmpty(toCheckedStr))
                {
                    result= false;
                }
                if (toCheckedStr.EndsWith(".html", StringComparison.CurrentCultureIgnoreCase)|| toCheckedStr.EndsWith(".htm", StringComparison.CurrentCultureIgnoreCase))
                {
                    result= true;
                }
    
                return result;
            }
    
            public virtual void PostResolveRequestCache(HttpContextBase context)
            {
    
                RouteData routeData = this.RouteCollection.GetRouteData(context);
                if (routeData != null)
                {
                    //检测路由数据,仅仅监听 html  资源
                    var controller = routeData.Values.FirstOrDefault(x => x.Key == "controller");
                    if (default(KeyValuePair<string,object>).Equals(controller))
                    {
                        //没有控制器数据 不做处理
                        return;
                    }
                    //检测路由控制器的后缀,是否是 *****.html 或者 *****.htm的格式
                    if (controller.Value==null)
                    {
                        return;
                    }
    
                    if (!this.IsValidExtension(controller.Value.ToString()))
                    {
                        return;
                    }
    
                    IRouteHandler routeHandler = routeData.RouteHandler;
                    if (routeHandler == null)
                    {
                        return;
                    }
    
                    if (!(routeHandler is StopRoutingHandler))
                    {
                        RequestContext requestContext = new RequestContext(context, routeData);
                        context.Request.RequestContext = requestContext;
                        IHttpHandler httpHandler = routeHandler.GetHttpHandler(requestContext);
                        if (httpHandler == null)
                        {
                            return;
                        }
    
                        try
                        {
    
                            context.RemapHandler(httpHandler);
    
                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }
    
    
                    }
                }
    
            }
    
    
    
            public void Dispose()
            {
                throw new NotImplementedException();
            }
    
    
    
    
    
    
        }
    }

    2 注册默认的错误页面

    <customErrors defaultRedirect="defaultError.html" mode="On">
    <error statusCode="404" redirect="404notfind.html"/>
    </customErrors>


    </system.web>

    3 注册模块

    <modules>
    <remove name="FormsAuthentication"/>
    <add name ="GateKeeper" type="WebClientService.Modules.GateKeeperOfStaticHtml,WebClientService"/>
    </modules>

  • 相关阅读:
    我的WCF之旅(1):创建一个简单的WCF程序
    网页设计中颜色的搭配
    CSS HACK:全面兼容IE6/IE7/IE8/FF的CSS HACK
    UVa 1326 Jurassic Remains
    UVa 10340 All in All
    UVa 673 Parentheses Balance
    UVa 442 Matrix Chain Multiplication
    UVa 10970 Big Chocolate
    UVa 679 Dropping Balls
    UVa 133 The Dole Queue
  • 原文地址:https://www.cnblogs.com/micro-chen/p/5834053.html
Copyright © 2011-2022 走看看