大家好,这一篇向大家介绍ASP.NET MVC路由机制。【PS:上一篇-->6. ASP.NET MVC 5.0中的HTML Helpers【HTML帮助类】

路由是一个模式匹配系统,它确保你能够将浏览器的请求,传递到控制器特定的Action方法上。路由引擎使用路由表,来将浏览器发送来的请求URL和路由表中定义的URL进行匹配。RouteConfig文件用来添加路由规则,路由是调用控制器和Action的方式。

我们在Global.asax文件中注册路由:通过在Application_Start方法中调用RegisterRoutes方法来注册路由。路由用于创建用户友好的URLs.路由可以设置程序启动页面,就像ASP.NET Web Forms 这样。路由系统能够使我们能够创建任何您想要的url,并以清晰和简洁的方式表达它们。

下面是路由引擎来执行路由,路由系统根据,用户请求的URL,来匹配路由表。如果找到了,就继续处理,没找到就抛异常。当ASP.NET 路由引擎在运行的时候收到了这个请求,然后就会为请求的URL,在路由表中找到匹配的规则,如果找到了 ,请求就会接着转到相应的控制器中,否则就会报HTTP 404错误。

下面的图片中,chapters是控制器,speakers是方法,Actions是可选的,这个URL匹配的是Home/Action这个路由规则,其中Action是Home控制器中的方法,还有路由你可以进一步配置一个可选参数ID,用来指向特定的数据。这就是为什么路由引擎知道哪些参数是可选的了。

现在理论知识了解差不多了,我们来看看怎么给MVC应用程序添加路由,以完成从控制器到Action的映射。我们来创建一个项目,动手实践一下:

创建一个空模板的MVC应用程序。

每一个MVC应用程序都默认创建了路由配置文件RouteConfig,里面有默认的实现。我们来看看:

可以看到RouteConfig类有一个静态的RegisterRoutes方法,这个方法在我们程序启动的时候,从Global.asax文件中进行注册。除此之外,任何带有.axd的请求,就会被IgnoreRoute进行捕捉,而交给程序的其他处理机制进行处理。我们可以这样说,IgnoreRoute用来阻止特殊的路由表,例如Web.Config,图片文件等等。

MapRoute方法是一个扩展方法,意味着方法已经在路由集合中定义了。代码里面定义了默认的路由规则,默认的路由名称是”Default“,指向的是Home控制器,Index方法,还有一个可选的id参数。

路由表在Golbal.asax文件中进行注册,当程序启动的时候,Application_Start方法被调用,然后就进行路由注册。

基本的默认路由配置介绍完了,我们怎么创建自己的路由规则呢?

首先,我们创建一个Author控制器,然后修改一下里面的代码:

然后创建AuthorDetail视图,写入下面的代码:

现在打开RouteConfig文件,创建一个新的路由--【Author】

运行项目:

然后再浏览器的URL中输入9:

现在以QueryString方式,在浏览器中输入:

还可以在方法上标注调用的是哪个路由:

看这里我们,就创建了一个路由了Author。大家学会了么?

7.ASP.NET MVC 5.0中的Routing【路由】的更多相关文章

  1. ASP.NET MVC 4.0中选择Windows 验证默认出错拒绝访问的原因和解决方案

    在VS 2012或者2013 中,根据模板创建一个ASP.NET MVC 4.0的应用程序,选择下面的模板 然后选择Intranet Application 不对源代码做任何修改,直接按下F5调试,会 ...

  2. 8. Filters in ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】

    ASP.NET Filers用来在MVC框架的不同请求处理阶段,注入额外的逻辑.过滤器为横切关注点提供了一种方法(日志记录,授权,缓存). 在这篇文章中,我将会向你介绍MVC框架支持的各种不同种类过滤 ...

  3. 6. ASP.NET MVC 5.0 中的HTML Helper【HTML 帮助类】

    这篇文章,我将带领大家学习HTML Helper.[PS:上一篇-->5.ASP.NET MVC 中的Area[区域]是什么] HTML Helpers是用来创建HTML标签进而创建HTML控件 ...

  4. ASP.NET MVC 4.0 中使用NPOI 2.2.0 按模板生成Excel报表

    使用 NPOI 你就可以在没有安装 Office 或者相应环境的机器上对 WORD/EXCEL 文档进行读写.NPOI是构建在POI 3.x版本之上的,它可以在没有安装Office的情况下对Word/ ...

  5. 返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model

    原文:返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model [索引页][源码下载] 返璞归真 asp.net mvc (8) - asp.net mvc ...

  6. asp.net MVC 4.0 View回顾——布局页与分部页

    asp.net MVC 4.0中总结 视图里加载部分视图几种方法 @RenderPage() 但它不能使用 原来视图的 Model 和 ViewData ,只能通过参数来传递. @RenderPage ...

  7. ASP.NET Core 3.0中使用动态控制器路由

    原文:Dynamic controller routing in ASP.NET Core 3.0 作者:Filip W 译文:https://www.cnblogs.com/lwqlun/p/114 ...

  8. 避免在ASP.NET Core 3.0中为启动类注入服务

    本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0类库转换为.NET Core 3.0类库 Part 2 - IHostingE ...

  9. 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

    原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...

随机推荐

  1. leetcode981

    考虑线性的搜索会超时,所以用二叉搜索来解决,代码如下: class TimeMap: def __init__(self): self.ST = dict() def set(self, key: ' ...

  2. 37.Spring-事务控制.md

    目录 1.分类 2.Spring对jadc事务管理 2.1xml方式 2.1.1首先定义Dao对象和Server对象 2.1.2配置文件实现事务管理 2.2注解方式 2.2.1对象类 2.2.2配置文 ...

  3. R语言-箱型图&热力图

    1.箱型图 boxplot()函数 > metals<-read.csv("metals.csv",header=TRUE) #读取文件和列名 > boxplot ...

  4. springboot @scheduled 并发

    本文介绍如何使用springboot的sheduled实现任务的定时调度,并将调度的任务实现为并发的方式. 1.定时调度配置scheduled 1)注册定时任务 package com.xiaoju. ...

  5. 使用LESS对CSS进行预处理

    LESS 做为 CSS 的一种形式的扩展,它并没有阉割 CSS 的功能,而是在现有的 CSS 语法上,添加了很多额外的功能,所以学习 LESS 是一件轻而易举的事情. 变量 请注意 LESS 中的变量 ...

  6. java学习笔记(一):开始第一个java项目

    这里使用IntelliJ IDEA 来新建第一个java项目 在新建项目向导,你可以选择你的项目支持的技术,你正在做一个普通的Java项目,只需单击下一步. 下一步,新建一个test的项目. 新建一个 ...

  7. python命名规则

    1 包.模块的命名规则:全部以小写字母形式来命名.比如:import random 2 类.对象的命名规则:类是每个单词的首字母要大写,其他字母小写比如:class MyFamily: ,类的私有属性 ...

  8. effector - 必应词典

    effector - 必应词典 美[ɪ'fektə(r)]英[ɪ'fektə(r)] n.效应物 网络效应器:效果器:受动器 变形复数:effectors:

  9. AltiumDesigner印制导线的走向及形状

    印制导线的走向及形状.在PCB布线时,相邻层的走线方向成正交结构,应避免将不同的信号线在相邻走成同一方向,以减少不必要的层间窜扰.当PCB布线受到结构限制(如某种背板)难以避免出现平行布线时,特别是当 ...

  10. JQuery复习心得

    this === event.currentTarget    event.stopPropagation  阻止冒泡  http:www.css88.com JQ和原生JS入口函数的区别: 书写个数 ...