自定义路由访问.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文件
从上图可见,通过新的路由访问页面出现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带来负面影响。