大家好,这一篇向大家介绍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. Innodb锁相关总结

    一.InnoDB共有七种类型的锁: (1)共享/排它锁(Shared and Exclusive Locks) (2)意向锁(Intention Locks) (3)插入意向锁(Insert Inte ...

  2. java书籍

    1.«java高并发编程详解 »一本比较详细介绍多线程的书籍,个人感觉比 并发编程思想 这本书详细

  3. Nginx虚拟目录设置

    location ~ .*\.html$   匹配所有以.html结尾的链接 --------------------------------------------------------- 关于a ...

  4. tcp的发送端一个小包就能打破对端的delay_ack么?

    3.10内核,反向合入4.9的bbr. 最近分析bbr的时候,收集了线上的一些报文,其中有一个疑问一直在我脑海里面,如下: 本身处于delay_ack状态的客户端,大概40ms回复一个delay_ac ...

  5. 初试Python语法小试牛刀之冒泡排序

    Python很火,心里很慌,没吃过猪肉,也要见见猪走路. 看了几天Python的语法,大概初步了解了一点点,https://www.liaoxuefeng.com/wiki/0014316089557 ...

  6. java 自动补全

    int youNumber = 1; // 0 代表前面补充0 // 4 代表长度为4 // d 代表参数为正数型 String str = String.format("%04d" ...

  7. javaMail实现收发邮件(三)

    JavaMail API中定义了一个java.mail.Transport类,它专门用于执行邮件发送任务,这个类的实例对象封装了某种邮件发送协议的底层实施细节,应用程序调用这个类中的方法就可以把Mes ...

  8. Could not GET 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.1.2/gradle-3

    参考 https://blog.csdn.net/verkery6/article/details/80797705

  9. windows、Linux同步外网NTP服务器时间

    配置 Windows 时间服务以使用外部时间源 要将内部时间服务器配置为与外部时间源同步,请使用以下方法之一: 软件自动配置  Windows 时间服务 若要自动修复此问题,请单击“下载”按钮. 在“ ...

  10. JAVA中float与double的区别

    float是单精度类型,精度是8位有效数字,取值范围是10的-38次方到10的38次方,float占用4个字节的存储空间 double是双精度类型,精度是17位有效数字,取值范围是10的-308次方到 ...