Adam Applied ASP.NET 4 in Context

1 介绍Routing系统

在引入MVC之前,ASP.NET假定被请求的URLs和服务器硬盘上的文件之间有着直接关系。服务器的任务是从浏览器接受请求,从相应文件分发请求。

这种工作方式只是用与Web Forms,每个ASPX页面都是一个文件,它有独立的回应请求的相应。

要处理MVC URLs,ASP.NET平台是用routing系统。在这章,我们展示如何设置和使用routing系统,来创造强大且灵巧的URL处理。routing系统可以让你创造任何你想要的URLs模式,将他们清楚,简明的方式表达出来。

routing系统有两个功能:

  • 检查进入的URL 1100.210,并估计出被请求的controller和action。当我们接收到客户端请求,这是你想让routing系统做的。
  • 生成外向的URLs。

在本章的第一部分,我们会关注定义routes,并使用它们处理进入的URLs,这样我们能到达controller和action。我们会展示如何使用这些routes生成要在HTML上显示的外向URLs

尽管ASP.NET MVC框架需要routing系统,但是也能用于其他ASP.NET技术,包括Web Forms。因此,routing系统类被装配在System.Web,而不是System.Web.Mvc。

当你创建一个新的MVC应用,你会看到VS已经添加了System.Web.Routing装配的引用。

1.1 创建Routing项目

要展示routing系统,我们需要一个项目,来添加routes。使用Internet Application模板创建一个新的MVC应用,叫做UrlsAndRoutes。我们选择这个模板,是因为它给我们一些现成的controller和action。

Routes被定义在Global.asax.cs中,它是Global.asax的后端代码文件。

应用第一次开始时,底层ASP.NET平台调用Application_Start方法,这导致RegisterRoutes方法被调用。这个方法的参数是静态属性RouteTable.Routes的值,它是RouteCollection类的实例。

我们可以删除从RegisterRoutes方法默认被添加的routes,因为我们想要展示多样的技术,来创建路由和可用的不同类型的路由。

1.3 介绍URL模式

Routing系统不可思议地使用一组routes工作。这些routes共同组成程序的URL schema或scheme,它是程序会识别或襄阳的一组URLs。

你不需要手动地产生每个URLs。每个route包含一个URL模式,它用来比较进入的URL。如果模式匹配URL,routing系统用它来会处理URL。

http://mysite.com/Admin/Index

URLs可以被分隔成片段,通过/分隔。这个URLs包括一个域名,两个部分的片段。我们要将它表达为路由系统可以理解的关系。这个URL模式是

{controller}/{action}

当处理一个进入的URL,路由系统的工作是匹配URL到模式,然后根据模式中的定义,为片段变量提取URL的值。片段变量使用花括号{}表达,例子中有两个片段变量,controller和action。

我们将匹配到一个模式,因为MVC应用汇总是有很多routes,路由系统会比较进入的URL到URL模式的每个route,直到它发现匹配。

路由系统没有任何controller和action的概念。它只是为片段变量提取值,并传递他们到请求管线。当请求完全抵达MVC框架,会进入管线,指派controller和action变量。这是为什么路由系统可以用在Web Form,并且可以创建自己的变量。

默认地,URL模式会匹配任何有正确片段数量的URL。例如,示例的模式会匹配任何有两个片段的URL。

Request URL Segment Variables
http://mysite.com/Admin/Index controller=Admin
action=Index
http://mysite.com/Index/Admin controller=Index
action=Admin
http://mysite.com/Apples/Oranges controller=Apples
action=Oranges
http://mysite.com/Admin 不匹配,片段太少
http://mysite.com/Admin/Index/Soccer 不匹配,片段太多
  • URL模式是保守的,会匹配有着相同片段数量的URLs。
  • URL模式是自由的,如果URL有着正确片段数量,模式会为片段变量提取值

这是默认的行为,是理解URL模式功能的关键。我们提到过,路由系统不知道任何关于MVC应用,所以URL提出来的值没有响应的controller或action,URL模式会匹配。

3 创建并注册一个简单的Route

publicstaticvoid RegisterRoutes(RouteCollection routes) {
Route myRoute =new Route("{controller}/{action}", new MvcRouteHandler());
routes.Add("MyRoute", myRoute);
}

一旦心理有一个URL模式,你可以使用它定义一个router。我们创建了一个新的route对象,将我们的URL模式传入构造参数。我们也传递一个MvcRouteHandler的实例。不同的ASP.NET技术提供不同的类来缝合route。我们使用Add方法将它添加到RouteCollection对象,传递一个给他起的名字,并传递我们创建的route。

给routes起名字是可选的,这有一个会牺牲整齐的关注点分离的routing。我们会解释着为什么会成为一个问题。

注册routes更轻松的方式,是使用RouteCollection类中定义的MapRoute方法。

routes.MapRoute("MyRoute","{controller}/{action}")

MapRoute方法只有MVC应用中有。ASP.NET Web Forms应用中有一个同样定义在RouteCollection类中的MapPageRoute方法。

3.1 测试进入URLS的单元测试

我们记得,你单元测试routes,确保他们像预期的那样处理进入的URLs。在一个应用中,URL架构会相当复杂,很容易创建一些意外的结果。

在之前的章节,我们回避创建一个公共的helper方法。本章,我们改变做法。测试一个应用的路由架构需要充分地做,当你能在一个单一的方法中分很多批测试,使用helper方法会变得简单。

我们需要mock三个类:HttpRequestBase,HttpContextBase,HttpResponseBase。这三个类放在一起,重建了路由系统的MVC基础设施。

【Pro ASP.NET MVC 3 Framework】.学习笔记.12.ASP.NET MVC3的细节:URLs,Routing和Areas的更多相关文章

  1. Pro ASP.NET MVC 5 Framework.学习笔记.6.3.MVC的必备工具

    每个MVC程序员的军火库中,都有这三个工具:一个依赖注入(DI)容器,一个单元测试框架,一个模拟工具. 1.准备一个示例项目 创建一个ASP.NET MVC Web Application的Empty ...

  2. Pro ASP.NET MVC 5 Framework.学习笔记.6.4.MVC的必备工具

    2.5.创建链式依赖 当你请求Ninject创建一个类型,它检查该类型的依赖是否声明.它也会检查该依赖是否依赖其他类型.如果这里有附加依赖,Ninject自动解决他们,并创建请求的所有类的实例.正是由 ...

  3. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  4. ASP.Net MVC开发基础学习笔记:一、走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  5. ASP.Net MVC开发基础学习笔记(1):走向MVC模式

    一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...

  6. ASP.NET MVC 5 系列 学习笔记 目录 (持续更新...)

    前言: 记得当初培训的时候,学习的还是ASP.NET,现在回想一下,图片水印.统计人数.过滤器....HttpHandler是多么的经典! 不过后来接触到了MVC,便立马爱上了它.Model-View ...

  7. ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步

    一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新 ...

  8. 【转载】ASP.NET MVC Web API 学习笔记---第一个Web API程序

    1. Web API简单说明 近来很多大型的平台都公开了Web API.比如百度地图 Web API,做过地图相关的人都熟悉.公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过 ...

  9. ASP.Net MVC开发基础学习笔记(5):区域、模板页与WebAPI初步

    一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新 ...

随机推荐

  1. 30天,O2O速成攻略【8.16武汉站】

    活动概况 时间:2015年08月16日13:30-16:30 地点:光谷创业咖啡(光谷广场资本大厦一楼停车场内) 主办:APICloud.爱立示.MBA移动业务助理 网址:www.apicloud.c ...

  2. 认识C和内存管理

    认识C和内存管理 C程序内存空间分为下面5类: stack栈: 存放着局部变量和函数参数等数据,向下生长 (可读可写可执行) heap堆:  给动态分配内存使用,向上生长 (可读可写可执行) bss ...

  3. Go 性能分析

    上线一定要用压力测试,才能知道自己的承受度是多少,不然出了问题,就各种排查. http://www.tuicool.com/articles/NVRJrm 通过jmeter压力测试,发现打印请求参数消 ...

  4. JAX-WS(二)之使用wsimport创建WebService客户端

    客户端开发的通常过程是从已有的WSDL处罚,创建辅助类JAXB对象和Service代理类,然后基于这些类开发自己的客户端应用. 开发步骤: 创建eclipse项目: 运行wsimport命令生成客户端 ...

  5. MyCat:在.NET Core中使用MyCat

    http://www.cnblogs.com/yuangang/p/5830716.html

  6. 通过zabbix自带模板监控windowsPC机器

       通过zabbix自带模板监控windowsPC机器   作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.       欢迎加入:高级运维工程师之路 598432640 相信有很多 ...

  7. JS练习题 显示登入者相关好友

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. C# 类的介绍,参数传递,各种符号说法

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. paper 57 :颜色直方图的代码

    clear clc close all Image = imread('29.jpg');[M,N,O] = size(Image);[h,s,v] = rgb2hsv(Image); H = h;  ...

  10. 夺命雷公狗---DEDECMS----2快速入门之玩转dede四大表之间的关系

    比如一个小说网站,网站里面有很多类型让我们的小说网他里面有很多种分类,如: 玄幻....奇幻....仙侠....武侠....文学....异界....都市....军事....历史....灵异....悬疑 ...