开发者社区> 技术小甜> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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 ,如需转载请自行联系原作者



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
路由
创建路由     路由提供了Route类作为IRouter的标准实现。当调用RouteAsync方法时,Route使用路由模板语法定义匹配URL路径的模式,当调用GetVirtualPath方法时,Route会使用相同的路由模板生成URL。
761 0
数据挖掘——概述
数据挖掘:运用基于计算机的方法(包括新技术)从数据中获得有用知识的整个过程,这就叫做数据挖掘。 在当今竞争的世界中,数据挖掘所扮演的角色越来越重要。
1321 0
【基础】MVC路由规则
如果您觉得文章对您有帮助,可以【打赏】博主或点击文章右下角【推荐】一下。您的鼓励是博主坚持原创和持续写作的最大动力!
499 0
MFC深入浅出-MFC概述
MFC概述   MFC是一个编程框架   MFC (Microsoft Foundation Class Library) 中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。
957 0
+关注
10138
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载