自定义路由访问.html文件报404错误两种解决方法

1、自定义路由规则

//定义新路由
routes.MapRoute(
                name: "bookdetail",
                url: "Books/BookDetail/Static/{id}.html",
                defaults: new { Controller = "Books", action = "BookDetail" },
                namespaces: new string[] { "BookShop.Controllers" }
                );

从代码中可以看到,这条规则是访问.html文件

自定义路由访问.html文件报404错误两种解决方法 

从上图可见,通过新的路由访问页面出现404错误

2、解决方法

         解决方法一:

                        找到项目中的Web.config文件下的system.webServer节点,并添加以下代码

                           

<modules>
      <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
</modules>

            个人不推荐,虽然能解决目前的问题,但是runAllManagedModulesForAllRequests是为所有 Modules 管理请求的一个开关,如果设置为 true,就是把所有请求到 Modules 的通道打通了,没有任何阻拦。而Modules 又是什么呢?字面意思可以理解为“模块”或“单元”的意思,它是属于 Web 服务器的东西,和 Web 应用程序不太相关,Web 应用程序只是对它发起一个请求。Modules 的相关东西请看:IIS Modules Overview

          总的来说就是一些静态文件的请求进入 Modules,造成没必要的性能开销,因为静态文件只是获取展示,完全没必要进行 Modules 处理,对 IIS 的 Modules 程序处理造成“压力”,特别是一些很大 PV 站点。

 

            解决方法二:

                同样在system.webServer——>handlers节点下添加,如下代码

               

<remove name="UrlRoutingModule-4.0"/>
<add name="UrlRoutingModule-4.0" path="*.html" verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Routing.UrlRoutingModule" preCondition="" />

                 通过以上这段代码,很轻松的解决了问题,而且又不会给IIS带来负面影响。

 

        注:以上两种方法都会造成图片无法显示问题,作者是使用<%:Url.Content()%>的方式解决的。