MVC 路由 概述

简介:

设置URL路由

URL路径中,大括号{}内部的代表参数。/作为分割符,不再大括号内的则作为常量。值得注意的是,{controller}和{action}作为2个关键字由MVC路由控制,如果确实需要用这个名字命名参数,可以在前面加上@,例如{@action}。

默认的设置路由在Global.asax文件中

public static void RegisterRoutes(RouteCollection routes)方法

routes.MapRoute(

                "Default", // Route name

                "{controller}/{action}/{id}", // URL with parameters

                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults

            );

new { controller = "Home", action = "Index", id = UrlParameter.Optional }是MapRoute中的默认值,意思就是什么都不输入的时候,controller的值和action的值也是必须有值的。

controller代表控制器,action代表这个控制器中的方法。必须要指定默认的controller和action,不然会报错。

 routes.MapRoute(

                "Default", // Route name

                "{controller}/{action}/{id}", // URL with parameters

                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults

            );

实际上是以下方法的一种简写形式:

Route myRoute = new Route("{controller}/{action}/{id}", new MvcRouteHandler())

{

Defaults = new RouteValueDictionary( new {

controller = "Home", action = "Index", id = UrlParameter.Optional

})

};

routes.Add("Default", myRoute);

路由的顺序也是十分重要,URL被一次匹配每个路由模式,一旦匹配成功,就不再继续匹配下去。这点要注意。例如:

routes.MapRoute(

"Default", // Route name

"{controller}/{action}/{id}", // URL with parameters

new { controller = "Home", action = "Index", // Parameter defaults

id = UrlParameter.Optional }

);

routes.MapRoute(

"Specials", // Route name

"DailySpecials/{date}", // URL with parameters

new { controller = "Catalog", action = "ShowSpecials" } // Parameter defaults

);

这里的Specials将不会被匹配到。

URL路由匹配的时候只匹配路径部分,域名和QueryString不会被匹配到。

路由约束

可以使用正则表达式对参数进行验证约束

routes.Add(new Route("Articles/{id}", new MvcRouteHandler())

{

Defaults = new RouteValueDictionary(

new { controller = "Articles", action = "Show" }

),

Constraints = new RouteValueDictionary(new { id = @"\d{1,6}",id22=@"\d{1,6}" })

});

上面部分可以简写为如下代码:

routes.MapRoute(null, "Articles/{id}",

new { controller = "Articles", action = "Show" },

new { id = @"\d{1,6}",id22=@"\d{1,6}" }

);

不定长度的路径

使用*号匹配不定长度。

 

routes.MapRoute(null, "Articles/{*articlePath}",

new { controller = "Articles", action = "Show" }

);

可以匹配/Articles/Science/Paleontology/Dinosaurs/Stegosaurus

 

匹配硬盘上的文件

尽管设置了路由,但是如果在一些特殊的情况下,硬盘上真实存在的文件和路由的URL一致,这时系统会处理硬盘真实存在的文件,而无视路由的存在。

要解决这个问题,使得无论是否匹配了真实存在的文件,都按照路由的URL来处理,应该在Application_Start()中如下写: 

protected void Application_Start()

        {

            AreaRegistration.RegisterAllAreas();

            RouteTable.Routes.RouteExistingFiles = true;

            RegisterRoutes(RouteTable.Routes);

        }

RouteTable.Routes.RouteExistingFiles默认是false。

这样设置了,就算文件真实存在都会按照路由的方式处理。除了下面2种情况:

1.没有任何匹配的路由。则仍然按照真实文件处理。

2.使用了IgnoreRoute(),无视了一些路由。



















本文转自cnn23711151CTO博客,原文链接:http://blog.51cto.com/cnn237111/548518 ,如需转载请自行联系原作者



相关文章
|
6月前
|
安全 前端开发 测试技术
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
安全开发-PHP应用&模版引用&Smarty渲染&MVC模型&数据联动&RCE安全&TP框架&路由访问&对象操作&内置过滤绕过&核心漏洞
|
7月前
|
前端开发 Java 应用服务中间件
Spring MVC框架概述
Spring MVC 是一个基于Java的轻量级Web框架,采用MVC设计模型实现请求驱动的松耦合应用开发。框架包括DispatcherServlet、HandlerMapping、Handler、HandlerAdapter、ViewResolver核心组件。DispatcherServlet协调这些组件处理HTTP请求和响应,Controller处理业务逻辑,Model封装数据,View负责渲染。通过注解@Controller、@RequestMapping等简化开发,支持RESTful请求。Spring MVC具有清晰的角色分配、Spring框架集成、多种视图技术支持以及异常处理等优点。
89 1
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-前端路由解析和渲染4
前端学习笔记202305学习笔记第三十一天-什么是mvc-前端路由解析和渲染4
54 0
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-前端路由解析和渲染2
前端学习笔记202305学习笔记第三十一天-什么是mvc-前端路由解析和渲染2
53 0
|
开发框架 前端开发 Java
Spring MVC简介与概述
Spring MVC简介与概述
50 0
Spring MVC简介与概述
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-vc和路由的绑定2
前端学习笔记202305学习笔记第三十一天-什么是mvc-vc和路由的绑定2
52 1
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-前端路由解析和渲染3
前端学习笔记202305学习笔记第三十一天-什么是mvc-前端路由解析和渲染3
56 0
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-vc和路由的绑定1
前端学习笔记202305学习笔记第三十一天-什么是mvc-vc和路由的绑定1
54 0
|
存储 设计模式 前端开发
3.1 Spring MVC概述
用于接收用户请求、转发用户请求、响应结果, DispatcherServlet是整个流程控制的中心,由它调用其他组件处理用户请求,分发到具体的对应Controller,从而获取到需要的业务数据Model,Model再通过DispatcherServlet传递给View完成页面呈现。MVC是一种编程思想,它将应用分为模型(Model)、视图(View)、控制器(Controller)三个层次,这三部分以最低的耦合进行协同工作,从而提高应用的可扩展性及可维护性。进行视图的解析,负责将处理结果生成View视图。
90 0
|
开发框架 前端开发 .NET
ASP.NET Core MVC 从入门到精通之路由
ASP.NET Core MVC 从入门到精通之路由
177 0