AspNet Mvc教学:Route路由切换-由Deepseek产生

ASP.NET MVC 4 中,实现用户输入 http://localhost/Htzd/Contact.html 却显示 http://localhost/Home/Index 页面内容的需求,需要采用路由映射技术并结合 Web.config 配置。

一、核心配置文件:RouteConfig.cs

打开 App_Start/RouteConfig.cs 文件,按以下方式配置 RegisterRoutes 方法:

csharp 复制代码
public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        
        // 将 /Htzd/Contact.html 映射到 Home/Index
        routes.MapRoute(
            name: "HtzdContact",
            url: "Htzd/Contact.html",
            defaults: new { controller = "Home", action = "Index" }
        );

        // 默认路由(必须放在最后)
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

注意 :路由匹配遵循从特殊到一般的原则,自定义的特定路由必须放在默认路由之前。

二、关键配置:Web.config

为了使 .html 后缀能被 ASP.NET MVC 路由系统处理,需在 Web.config<system.webServer> 节点中添加 Handler 配置:

xml 复制代码
<system.webServer>
  <handlers>
    <add name="HtmlFileHandler" path="*.html" verb="GET,HEAD" 
         type="System.Web.Handlers.TransferRequestHandler" 
         preCondition="integratedMode,runtimeVersionv4.0"/>
  </handlers>
</system.webServer>

这样配置后,.html 文件请求将被路由系统接管,而非由 IIS 直接作为静态文件处理。

三、完整的调用链路

用户的请求流程如下:

复制代码
1. 用户访问:http://localhost/Htzd/Contact.html
                    ↓
2. Web.config 中配置的 HtmlFileHandler 使请求进入 ASP.NET 管道
                    ↓
3. RouteConfig 中的路由规则匹配 URL 模式 "Htzd/Contact.html"
                    ↓
4. 路由系统将请求映射到 HomeController 中的 Index 方法
                    ↓
5. 执行 Home/Index 对应的视图,页面内容呈现 http://localhost/Home/Index 的内容

四、原理说明

  • 路由系统默认行为 :默认情况下,ASP.NET MVC 会忽略磁盘上实际存在的物理文件请求,直接返回静态文件。如果服务器根目录下存在 Contact.html 物理文件,路由规则将不会生效。

  • UrlRoutingModule 模块 :配置 Handler 后,.html 请求会经过 UrlRoutingModule 处理,确保路由规则能够匹配并执行对应的控制器方法,最终在浏览器地址栏仍显示 http://localhost/Htzd/Contact.html 地址,呈现的却是 Home/Index 页面的内容。

  • 路由注册 :在 Global.asaxApplication_Start 事件中调用 RouteConfig.RegisterRoutes(RouteTable.Routes) 完成路由规则的注册。

⚠️ 不建议配置 runAllManagedModulesForAllRequests="true",该设置会导致所有请求(包括图片、CSS、JS 等静态资源)都经过 HTTP 模块处理,造成性能浪费并可能引发错误。

相关推荐
摇滚侠2 天前
Spring MVC 不是一个单独的框架,是 Spring 框架的一个模块
java·spring·mvc
我登哥MVP3 天前
Spring Boot 从“会用”到“精通”:SpringBoot MVC 请求处理全流程
java·spring boot·后端·spring·mvc·maven·intellij-idea
摇滚侠5 天前
JavaWeb 全套教程 MVC 模式 93
mvc
代码的小搬运工5 天前
【iOS】MVC架构
ios·架构·mvc
qq_2518364577 天前
基于MVC的学校食堂点餐管理系统的设计与实现
mvc
故渊at7 天前
系列一:架构思想进阶 | 第1篇 Android 架构演进实录:从 MVC 的“万能类”到 MVVM 的数据驱动
android·架构·mvc
RR13357 天前
Spring MVC and Spring Gateway 的差异,以及报错处理
spring·gateway·mvc
gCode Teacher 格码致知9 天前
Asp.net Mvc教学: Url.Encode及Html.Encode的区别和联系-由Deepseek产生
asp.net·mvc
sakiko_14 天前
Swift学习笔记34-MVC架构,SwiftUI与UIkit混编练习
笔记·学习·swiftui·mvc·swift