ASP.NET MVC路由详解

1.什么是路由

一种URL(统一资源定位符)的体现方式,将URL映射到方法的调用。

在 Web Form 应用,每个 URL 必须匹配一个 .aspx 物理文件,如:http://domain/bar.aspx 必须有一个用于响应渲染的文件 bar.aspx。ASP.Net MVC 则通过引入 Routing 来消除必须使用物理文件映射 URL 的弊端。路由使我们能够定义映射到请求处理程序的 URL 模式。请求处理程序在 WebForm 中是 .aspx 文件,在 MVC 中是 Controller 以及 Action 方法。例如:http://domain/foo

注:路由并非mvc专属,它是建立在.NET Framework上的一个组件。

2.使用路由的优势

①根据系统需求,灵活的划分请求规则

②防止注入式攻击,提高安全性。传统URL和磁盘上的文件一一对应,通过URL就能确定站点目录,而路由把请求映射到控制器。

③利于搜索引擎优化,可以将URL请求统一规范,以后维护中,如果页面发生变化,URL可以保持不变。

3.如何定义路由

新建一个空的ASP.NET MVC项目,目录如下:

双击打开Global.asax,如下:

注:Application_start()是程序入口方法,只在打开网站时执行一次。

RouteConfig.cs文件位于App_Start文件夹中,如下:

路由模板指的是:域名+端口号之后的内容。

MVC工作过程:

一、URL模式

上面的 URL 中的参数值是:“{controller}/{action}/{id}”,称之为 URL 模式。

占位符:字符或字符串,如“x”、“id”、“year”等。

字面量:字符或字符串,最常见的是“/”。

注:不能以“/”或“~”开头,不能包含“?”,占位符不能连续。

URL模式示例总结:

匹配要求:

1.字面量必须完全一致。

2.不区分大小写。

3.没有包含在大括号内的信息作为常量看待,如上面的Course。

定义多个URL模式的路由:

注:如果一个URL能匹配多个路由,则默认使用第一个匹配的路由。

UrlPrameter.Optional的作用是作为id的默认值,并可以让“/Home/Index”或“/Home”能正常匹配。

关于占位符:

示例:https://www.cnblogs.com/1016391912pm/p/12088733.html

{controller}和{action}是必不可少的,controller代表控制器(示例中的Test),action代表方法(示例中的Index),如果没有定义的话就会因找不到路径而出错。

像{aa}/{bb}/{cc}这种占位符只是起到占位作用,系统不会将其解析为控制器或方法。

路由数据的存储和映射

在ASP.NET MVC中,路由数据存储在RouteData中,方式为键值对,和字典相似。

路由数据:RouteDate.Values 是RouteValueDictionary类型。RouteData定义为视图和控制器基类的属性。

可以在视图中遍历RouteData.Values,如下:

输出:

*匹配

*来匹配 URL 剩余部分,示例代码如下:

路由约束

constraints代表约束:

二、特性路由

1.简单的特性路由

在RegisterRoutes方法中添加:

routes.MapMvcAttributeRoutes();

在控制器类中的方法上添加特性:

我们在浏览器中就可以通过地址http://localhost:46198/haha来运行这个方法,并指向视图中的Index.cshtml

可以设置多个特性,则可以通过每一个特性名来访问。

2.使用占位符

可以通过http://localhost:46198/hello/1来访问Second方法

3.为每一个方法设置路由

有时一个控制器中的路由遵循相似的路由模板,可以这样设置:

这样控制器类中的方法都可以通过home/方法名来访问。(可以在方法名上重新设置,覆盖这种方式)

4.路由约束

对于[Route("home/{id}")],我们希望的是id是int类型的,则可以这样设置:[Route("home/{id:int}")]

一些内联约束:

5.路由默认值

[Route("home/{action=Index}")]

原文地址:https://www.cnblogs.com/1016391912pm/p/12735571.html