初识MVC的Url映射潜规则Routing(3)_第1页
初识MVC的Url映射潜规则Routing(3)_第2页
初识MVC的Url映射潜规则Routing(3)_第3页
初识MVC的Url映射潜规则Routing(3)_第4页
初识MVC的Url映射潜规则Routing(3)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、我要学ASP.NET MVC 3.0(三): 初识MVC的Url映射潜规则Routing概述在 ASP.NET 网站中,URL 通常映射到存储在磁盘上的文件(通常为 .aspx 文件)。 这些 .aspx 文件包括经过处理以响应请求的标记和代码。ASP.NET MVC 框架将 URL 映射到不同于 ASP.NET Web 窗体页面的服务器代码。 该框架会将 URL 映射到 controller 类,而不是将 URL 映射到 ASP.NET 页面或处理程序。 Controller 类将处理传入的请求,如用户输入和交互,并根据用户输入执行相应的应用程序和数据逻辑。 Controller 类通常会调

2、用一个生成 HTML 输出作为响应的单独视图组件。ASP.NET MVC 框架会将模型、视图和控制器组件分开。 模型表示应用程序的业务/域逻辑,通常具有数据库支持的数据。 视图由控制器进行选择,并呈现相应的 UI。 默认情况下,ASP.NET MVC 框架使用现有的 ASP.NET 页面 (.aspx)、母版页 (.master) 和用户控件 (.ascx) 类型呈现到浏览器。 控制器将在自身中查找相应的操作方法,获取要用作操作方法参数的值,并处理可能会在运行操作方法时发生的任何错误。 然后,它将呈现请求的视图。 默认情况下,每组组件都位于 MVC Web 应用程序项目的单独文件夹中。回顾MV

3、C应用程序的执行过程发送给基于 ASP.NET MVC 的 Web 应用程序的请求首先通过 UrlRoutingModule 对象(一个 HTTP 模块)进行传递。 此模块将分析请求并执行路由选择。 UrlRoutingModule 对象将选择与当前请求匹配的第一个路由对象。 (路由对象是实现 RouteBase 的类,并且通常是 Route 类的实例。) 如果任何路由都不匹配,则 UrlRoutingModule 对象不执行任何操作,并允许请求回退到常规的 ASP.NET 或 IIS 请求处理流程。从选定的 Route 对象中,UrlRoutingModule 对象将获得一个对象,所获得的对

4、象将实现 IRouteHandler 接口并与 Route 对象关联。 通常,在 MVC 应用程序中,这将是 MvcRouteHandler 类的一个实例。 MvcRouteHandler 实例将创建一个实现 IHttpHandler 接口的 MvcHandler 对象。 然后,MvcHandler 对象会选择将最终处理该请求的控制器。UrlRoutingModule 和 MvcRouteHandler 类是 ASP.NET MVC 框架的入口点。 它们执行下列操作:选择 MVC Web 应用程序中合适的控制器。获取特定的控制器实例。调用该控制器的 Execute 方法。下表列出了 MVC W

5、eb 项目的执行阶段。阶段详细信息接收对应用程序的第一个请求在 Global.asax 文件中,Route 对象将添加到 RouteTable 对象中。执行路由UrlRoutingModule 模块使用 RouteTable 集合中第一个匹配的 Route 对象来创建 RouteData 对象,然后使用所创建的对象创建 RequestContext 对象。创建 MVC 请求处理程序MvcRouteHandler 对象将创建 MvcHandler 类的实例,并将 RequestContext 实例传递给处理程序。创建控制器MvcHandler 对象使用 RequestContext 实例标识用于

6、创建控制器实例的 IControllerFactory 对象(通常是 DefaultControllerFactory 类的实例)。执行控制器MvcHandler 实例调用控制器的 Execute 方法。调用操作对于从 ControllerBase 类继承的控制器,与该控制器关联的 ControllerActionInvoker 对象将决定要调用的 controller 类的操作方法,然后调用该方法。执行结果操作方法将接收用户输入,准备合适的响应数据,然后通过返回结果类型来执行结果。 可执行的内置结果类型包括:ViewResult(呈现视图并且是最常用的结果类型)、RedirectToRout

7、eResult、RedirectResult、ContentResult、JsonResult、FileResult 和 EmptyResult。 基础概念UrlRoutingModule 类匹配定义的路由的 URL 请求。UrlRoutingModule 类匹配 ASP.NET 应用程序中的路由的 HTTP 请求。 该模块循环访问 RouteCollection 属性中的所有路由,并搜索具有与 HTTP 请求的格式匹配的 URL 模式的路由。 该模块找到匹配路由后,它会检索 IRouteHandler 对象,以查找该路由。 该模块会从该路由处理程序获取一个 IHttpHandler 对象,并

8、将该对象用作当前请求的 HTTP 处理程序。UrlRoutingModule.RouteCollection 属性 获取或设置 ASP.NET 应用程序的定义路由的集合。包含路由的对象的集合。IRouteHandler 接口定义类必须实现才能处理匹配路由模式的请求的协定。IRouteHandler.GetHttpHandler 方法 提供处理请求的对象。参数为一个System.Web.Routing.RequestContext对象,封装有关请求的信息。返回一个处理请求的System.Web.IHttpHandler对象。IHttpHandler 接口定义 ASP.NET 为使用自定义 HTT

9、P 处理程序同步处理 HTTP Web 请求而实现的协定。ControllerBase.Execute 方法 执行指定的请求上下文。RouteTable 类存储应用程序的 URL 路由。路由是用于处理请求的 URL 模式,可用于动态构造 URL。 Routes 属性是一个 static 属性(在 Visual Basic 中为 Shared),它包含应用程序中用于指定 URL 请求于处理该请求的类匹配的方式的所有路由。 若要指定路由,您可以将路由定义添加到 Routes 属性中。 通常情况下,您可以将路由添加到 Global.asax 文件中的 Application_Start 事件的事件处

10、理程序的 Routes 属性中。当 ASP.NET 应用程序处理请求时,该应用程序会循环访问 Routes 属性中的路由集合,以便查找与 URL 请求的格式匹配的路由。 您添加到 Routes 属性的路由的顺序非常重要,因为应用程序会使用它在与 URL 匹配的集合中找到的第一个路由。RouteTable.Routes 属性 获取从 RouteBase 类派生的对象的集合。MVC 包括以下处理程序类型: MvcHandler. 此处理程序负责启动用于 MVC 应用程序的 ASP.NET 管道。 它从 MVC 控制器工厂接收 Controller 实例;此控制器处理请求的进一步处理。 注意,即使

11、MvcHandler 实现 IHttpHandler,也不能将其映射为处理程序(例如,.mvc 文件扩展名),因为该类不支持无参数构造函数。 (它唯一的构造函数需要一个 RequestContext 对象。)MvcRouteHandler. 此类实现了 IRouteHandler,因此可以与 ASP.NET 路由集成。 MvcRouteHandler 类将路由与 MvcHandler 实例关联。 当您使用 MapRoute 方法时,向路由注册 MvcRouteHandler 实例。 当 MvcRouteHandler 类被调用时,该类使用当前的 RequestContext 实例产生 MvcH

12、andler 实例。 然后它会将控制委托给新 MvcHandler 实例。MvcHttpHandler. 此处理程序用于在不通过路由模块的情况下帮助直接处理程序映射。 如果您希望一个文件的扩展名(如 .mvc)直接映射到一个 MVC 处理程序,这很有用。 在内部,MvcHttpHandler 执行 ASP.NET 路由通常执行的相同任务(通过 MvcRouteHandler 和 MvcHandler)。 但是,它将这些任务作为处理程序而不是模块来执行。 UrlRoutingModule 为所有请求启用时,通常不使用此处理程序。Url路由ASP.NET MVC 框架将使用 ASP.NET 路由引

13、擎,通过该引擎可以灵活地将 URL 映射到 controller 类。 您可以定义 ASP.NET MVC 框架使用的路由规则,以评估传入的 URL 以及选择相应的控制器。 您还可以让该路由引擎自动分析 URL 中定义的变量,并让 ASP.NET MVC 框架将值作为参数自变量传递给控制器。路由“路由”是映射到处理程序的 URL 模式。 处理程序可以是物理文件,例如 Web 窗体应用程序中的 .aspx 文件。 处理程序还可以是处理请求的类,例如 MVC 应用程序中的控制器。 若要定义路由,可以通过指定 URL 模式、处理程序和(可选)路由名称,创建 Route 类的一个实例。通过将 Rout

14、e 对象添加到 RouteTable 类的静态 Routes 属性,向应用程序中添加路由。 Routes 属性是一个存储应用程序的所有路由的 RouteCollection 对象。通常不必编写代码来在 MVC 应用程序中添加路由。 MVC 的 Visual Studio 项目模板包含预先配置的 URL 路由。 它们是在 MvcApplication 类中定义的,该类是在 Global.asax 文件中定义的。特性ASP.NET 路由使您可以使用不必映射到网站中特定文件的 URL。 由于该 URL 不必映射到文件,因此可以使用对用户操作进行描述因而更易于被用户理解的 URL。在不使用路由的 AS

15、P.NET 应用程序中,对 URL 的传入请求通常映射到处理该请求的物理文件,如 .aspx 文件。 例如,对 http:/server/application/Products.aspx?id=4 的请求映射到名为 Products.aspx 的文件,该文件包含代码和标记用于呈现对浏览器的响应。 网页使用查询字符串值 id=4 来确定要显示的内容类型。在 ASP.NET 路由中,可以定义 URL 模式,这些模式映射到请求处理程序文件但是不必在 URL 中包含这些文件的名称。 另外,可以在 URL 模式中包含占位符,以便无需查询字符串,即可将变量数据传递到请求处理程序。例如,在请求 http:

16、/server/application/Products/show/beverages 时,路由分析器可以将值 Products、show 和 beverages 传递给页处理程序。 在此示例中,如果路由是使用 URL 模式 server/application/area/action/category 定义的,则页处理程序将收到一个字典集合,在该集合中,与键 area 关联的值为 Products,键 action 的值为 show,键 category 的值为 beverages。 在不由 URL 路由管理的请求中,/Products/show/beverages 片断将被解释为应用程序中

17、一个文件的路径。URL 模式URL 模式可以包含文本值和变量占位符(也称为“URL 参数”)。 文本和占位符位于由斜杠 (/) 字符分隔的 URL 段中。当生成请求时,URL 分析为段和占位符,变量值提供给请求处理程序。 此过程类似于分析查询字符串中的数据并将该数据传递给请求处理程序的方法。 在两种情况下,变量信息都包括在 URL 中并以键值对的形式传递给处理程序。 对于查询字符串,键和值都位于 URL 中。 对于路由,键是在 URL 模式中定义的占位符名称,只有值位于 URL 中。在 URL 模式中,可以通过用大括号( 和 )括住占位符来定义占位符。 可以在一个段中定义多个占位符,但必须用一

18、个文本值分隔开。 例如,language-country/action 是有效的路由模式。 但是,由于占位符之间没有文本值或分隔符,所以 languagecountry/action 不是有效的模式。 因此,路由无法确定在哪里将 language 占位符的值与 country 占位符的值分隔开。下表演示有效的路由模式和一些与模式匹配的 URL 请求的示例。路由定义 匹配 URL 示例 controller/action/id /Products/show/beverages table/Details.aspx /Products/Details.aspx blog/action/entry

19、/blog/show/123 reporttype/year/month/day /sales/2008/1/5 locale/action /US/show language-country/action /en-US/show MVC 应用程序中的典型 URL 模式MVC 应用程序中用于路由的 URL 模式通常包括 controller 和 action 占位符。当收到请求时,会将其路由到 UrlRoutingModule 对象,然后路由到 MvcHandler HTTP 处理程序。 MvcHandler HTTP 处理程序通过向 URL 中的控制器值添加后缀“Controller”以确定

20、将处理请求的控制器的类型名称,来确定要调用的控制器。 URL 中的操作值确定要调用的操作方法。例如,包含 URL 路径 /Products 的 URL 映射到名为 ProductsController 的控制器。 action 参数中的值是调用的操作方法的名称。 包含 URL 路径 /Products/show 的 URL 将导致调用 ProductsController 类的 Show 方法。下表显示了默认 URL 模式,并给出由默认路由处理的 URL 请求的示例。默认 URL 模式 匹配 URL 示例 controller/action/id http:/server/application/Products/show/beverages resource.axd/*pathInfo http:/server/applica

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论