网址路由(Routing)在ASP.NET MVC中有两个主要用途,一个用途是匹配通过浏览器传来的HTTP请求,另一个用途则是响应适当的网址给浏览器

3.1匹配通过浏览器传来的HTTP请求

首先我们来看下第一个用途,也就是匹配通过浏览器传来的HTTP请求。

客户端对ASP.NET网站发出请求时,能够通过Routing找到合适的HttpHandler来处理网页,大致的处理流程为:

如果HttpHandler是由MvcHandler来处理的,那么,此时就会进入ASP.NET MVC的执行生命周期,并且会找到适当的Controller与Action来对其进行处理,并将信息反馈到客户端。

例子说明:先将上次创建的默认MVC项目运行起来,然后点击右上角的“关于”链接,如图所示:

此时,浏览器的网址列出现的URL会变成以下,注意URL路径部分:

http://localhost:28039/Home/About

这个单击链接的动作,事实上会让浏览器将URL转换成一个http请求的封包,并且由浏览器发出http请求到服务器上,这时会先由iis接收到这个http封包,然后转交给网址路由模块负责决定要将此http请求交给哪个HttpHander处理。在这个例子中,当然是转交给MvcHander处理,接着才会进入ADP.NET MVC的运行生命周期。

3.2响应适当的网址给浏览器

网址路由的另一个用途是决定ASP.NET MVC应该输出什么样的网址并将其返回给浏览器,一般来说,跳转地址或者在View中显示超链接时,都需要参考网址路由的定义,因为这样才能动态决定ASP.NET MVC输出的网址应该是什么。

3.3默认的网址路由属性分析

默认的网址路由规则定义在App_Start\RouteConfig.cs文档里,如图所示:

图中标号介绍如下:

①所有的ASP.NET Web程序入口点就在HttpApplication的Application_Start()事件,RouteTable.Routes是一个公开的静态对象,用来保存所有网址路由的规则集(RouteCollection)在Global.asax的Application_Start()事件加上 RouteConfig.RegisterRoutes(RouteTable.Routes)行,将RouteTable.Routes变量传入RouteConfig.RegisterRoutes静态方法,如图所示代码:

②在默认RegisterRoutes方法中的IgnoreRoute,是用来定义不要通过网址路由处理的网址,若对比成功,则不会继续对比下去,所以不会进入ASP.NET MVC运行生命周期。

③{resource}代表一个RouteValue路由变量,就是代表一个“位置”,可以放置一个用不到的变量,*.axd(关于WebForm的文档)

④{*pathInfo}也是一个RouteValue路由变量,*代表抓取全部的意思,这个路由路径会是完整的路径信息除③对比得到的网址。

⑤MapRoute是用来定义路由的方法

⑥name参数定义路由名称

⑦url具名参数定义URL样式与每个路径段落的RoteValue参数名称。  url: "{controller}/{action}/{id}",意思是如果我们输入的网址路径是/Home/About/123的话,那么controller的路由值就是Home,action的路由值就是About,e而id的路由值就是123。

⑧defaults具名参数定义路由参数的默认值,当网址路由对比找不到HTTP请求时,会先尝试带入这里定义的默认值,然后再对比是否有符合的controller与action可以运行。

3.4给网址路由加上路由值的条件约束

MapRoute是最常来定义网址路由规则的扩充方法 有许多重载, constraints这个具名参数就是替路由值加上一些条件约束,如图所示:

意思是id路由值全是数字时才能对比成功。

ASP.NET MVC 小牛之旅3:Routing——网址路由的更多相关文章

  1. ASP.NET MVC 小牛之旅4:ASP.NET MVC的运行生命周期

    ASP.NET MVC的运行生命周期大致分成三大过程:(1)网址路由对比. (2)运行Controller与Action. (3)运行View并回传结果. 4.1网址路由对比 当iis收到http请求 ...

  2. ASP.NET MVC 小牛之旅1:何谓MVC

    在学习ASP.NET MVC之前首先了解什么 是MVC ? MVC不是一种语言,严格来说也不算一个技术,而是开发时所使用的一种架构(框架),它就像是一种开发观念,或是一个设计样式. MVC让软件开发的 ...

  3. 7.ASP.NET MVC 5.0中的Routing【路由】

    大家好,这一篇向大家介绍ASP.NET MVC路由机制.[PS:上一篇-->6. ASP.NET MVC 5.0中的HTML Helpers[HTML帮助类] ] 路由是一个模式匹配系统,它确保 ...

  4. ASP.NET MVC 小牛之旅2:体验第一个MVC程序

    了解了什么是MVC之后,接下来用一个非常简单的留言板程序概要的了解MVC网站开发的过程,对MVC开发有个大致的轮廓.第一个项目将不会提到过多与数据库相关的技术,因此将以Framework Code F ...

  5. [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject

    本人博客已转移至:http://www.exblr.com/liam  为什么需要依赖注入 在[ASP.NET MVC 小牛之路]系列的理解MVC模式文章中,我们提到MVC的一个重要特征是关注点分离( ...

  6. [ASP.NET MVC 小牛之路]10 - Controller 和 Action (2)

    继上一篇文章之后,本文将介绍 Controller 和 Action 的一些较高级特性,包括 Controller Factory.Action Invoker 和异步 Controller 等内容. ...

  7. [ASP.NET MVC 小牛之路]15 - Model Binding

    Model Binding(模型绑定)是 MVC 框架根据 HTTP 请求数据创建 .NET 对象的一个过程.我们之前所有示例中传递给 Action 方法参数的对象都是在 Model Binding ...

  8. [ASP.NET MVC 小牛之路]18 - Web API

    Web API 是ASP.NET平台新加的一个特性,它可以简单快速地创建Web服务为HTTP客户端提供API.Web API 使用的基础库是和一般的MVC框架一样的,但Web API并不是MVC框架的 ...

  9. [ASP.Net] 转 > ASP.NET MVC 小牛之路

    URL: http://www.cnblogs.com/willick/ 看到了不错的学习笔记,MVC.Net学习之路展开   [ASP.NET MVC 小牛之路]18 - Web API [ASP. ...

随机推荐

  1. Array对象(一)

    Array是JavaScript中的一个事先定义好的对象(也可以称作一个类),可以直接使用. 创建Array对象: var array = new Array(); 创建指定元素个数的Array对象: ...

  2. java:Eclipse:Could not create the view:解决办法

    Eclipse:Could not create the view: Plug-in org.eclipse.jdt.ui was unable to load class org.eclipse.j ...

  3. BAT系列(一)— CNN

    1.CNN最成功的应用是在CV 那为什么NLP和Speech的很多问题也可以用CNN解出来?为什么AlphaGo里也用了CNN?这几个不相关的问题的相似性在哪里?CNN通过什么手段抓住了这个共性? 以 ...

  4. [转]Eclipse快捷键_01_常用快捷键汇总

    (注:红色标出来的是经常使用到的快捷键,磨刀不误砍柴工啊...) 一.常用快捷键 Shift+Alt+L:  自动补全等号左边对象 .(用鼠标选中这一行,然后按组合键Shift+Alt+L,在弹出的对 ...

  5. 一篇 jQuery 常用方法及函数的文章留存备忘。

    jQuery 常见操作实现方式 $("标签名") //取html元素 document.getElementsByTagName("") $("#ID ...

  6. Android DOM解析XML方法及优化

    在Android应用开发中,我们常常要在应用启动后从服务器下载一些配置文件,这些配置文件包含一些项目中可能用到的资源,这些文件很多情况下是XML文件,这时就要将XML下载到文件中保存,之后再解析XML ...

  7. 不要试图用msvc来编译ffmpeg

    出于学习目的,想建一个vs2010工程来编译ffmpeg(http://www.ffmpeg.org/),但是由于意义不大,并且工作量太大放弃了.原因如下: 1.一些unix平台相关的头文件.库的依赖 ...

  8. luogu1901 发射站

    单调栈 正着插一遍反着插一遍 记录每个点左边右边第一个比他高的... yyc太强辣 #include<iostream> #include<cstdlib> #include& ...

  9. 转 Django根据现有数据库,自动生成models模型文件

    Django引入外部数据库还是比较方便的,步骤如下 : 创建一个项目,修改seting文件,在setting里面设置你要连接的数据库类型和连接名称,地址之类,和创建新项目的时候一致 运行下面代码可以自 ...

  10. 三种 Failover 之 Client-Side Connect time Failover、Client-Side TAF、Service-Side TAF

    三种 Failover 之 Client-Side Connect time Failover.Client-Side TAF.Service-Side TAF 理论背景 Oracle  RAC 同时 ...