ASP.NET MVC 路由规则写法

简介: 看书的时候,喜欢去思考,喜欢问自己几个为什么,但是天资愚笨,长时间找不到答案,这可如何是好?上天呀,赐给我一个聪明的大脑吧!或者告诉我如何在遇到问题的时候,能快速的解决。这篇博客不为别的,只是提供一种解决问题的方法,作为程序员,虽然我算不上,源码可能才是问题的本质。

   看书的时候,喜欢去思考,喜欢问自己几个为什么,但是天资愚笨,长时间找不到答案,这可如何是好?上天呀,赐给我一个聪明的大脑吧!或者告诉我如何在遇到问题的时候,能快速的解决。这篇博客不为别的,只是提供一种解决问题的方法,作为程序员,虽然我算不上,源码可能才是问题的本质。

  新创建一个ASP.NET.MVC项目的时候,会有一个默认的路由规则,形式如下:

routes.MapRoute(
 "Default", // 路由名称
 "{controller}/{action}/{id}", // 带有参数的 URL
 new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);

 我们知道大括号里面的表示占位符,既然是占位符,那么换成其它的是不是也行,当换成 

routes.MapRoute(
                "Default", // 路由名称
                "{action}/{id}", // 带有参数的 URL
                new { controller = "Home",action = "LogOn", id = UrlParameter.Optional } // 参数默认值
            );

 

这个是可以的,但是换成下面的就不行,结果出错。

routes.MapRoute(
                "Default", // 路由名称
                "{action}/{id}", // 带有参数的 URL
                new { action = "LogOn", id = UrlParameter.Optional } // 参数默认值
            );

 

错误信息也提示了,必须有"controller",对于我该的第一种情况,也就是下面的虽然在规则中没出现,但是默认值中确出现了,也就是说这个其实是还有 “controller”的

 routes.MapRoute(
                "Default", // 路由名称
                "{action}/{id}", // 带有参数的 URL
                new { controller = "Home",action = "LogOn", id = UrlParameter.Optional } // 参数默认值
            );

 

决定找到答案,于是反编译了代码,看到了自己想要的答案:

 

 其实也可以从网上下载到源码,从源码中也可以看到:

   private void ProcessRequestInit(HttpContextBase httpContext, out IController controller, out IControllerFactory factory)
        {
            // If request validation has already been enabled, make it lazy. This allows attributes like [HttpPost] (which looks
            // at Request.Form) to work correctly without triggering full validation.
            // Tolerate null HttpContext for testing.
            HttpContext currentContext = HttpContext.Current;
            if (currentContext != null)
            {
                bool? isRequestValidationEnabled = ValidationUtility.IsValidationEnabled(currentContext);
                if (isRequestValidationEnabled == true)
                {
                    ValidationUtility.EnableDynamicValidation(currentContext);
                }
            }

            AddVersionHeader(httpContext);
            RemoveOptionalRoutingParameters();

            // Get the controller type
            string controllerName = RequestContext.RouteData.GetRequiredString("controller");

            // Instantiate the controller and call Execute
            factory = ControllerBuilder.GetControllerFactory();
            controller = factory.CreateController(RequestContext, controllerName);
            if (controller == null)
            {
                throw new InvalidOperationException(
                    String.Format(
                        CultureInfo.CurrentCulture,
                        MvcResources.ControllerBuilder_FactoryReturnedNull,
                        factory.GetType(),
                        controllerName));
            }
        }


 System.Web.Mvc.  MvcHandler 

 

同理,Action也是必须出现的。

 

相关文章
|
7月前
|
开发框架 .NET C#
ASP.NET Core Blazor 路由配置和导航
大家好,我是码农刚子。本文系统介绍Blazor单页应用的路由机制,涵盖基础配置、路由参数、编程式导航及高级功能。通过@page指令定义路由,支持参数约束、可选参数与通配符捕获,结合NavigationManager实现页面跳转与参数传递,并演示用户管理、产品展示等典型场景,全面掌握Blazor路由从入门到实战的完整方案。
622 6
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
693 5
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
428 7
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
364 0
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
349 0
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
505 0
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
806 0
|
安全 前端开发 测试技术
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
225 0
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
255 0