使用路由,先引用 "System.Web.Routing",
1、Routing的作用(根据识别出来的数据,将请求传递给Controller和Action)。
1.1、确定Controller(控制器)。
1.2、确定Action(方法)。
1.3、确定其他参数。
2、理解默认的路由规则。
在App_Start文件夹中有一个RouteConfig.cs的类,里面有一个默认的路由规则。
当一个MVC应用程序首次运行时,会调用Application_Start()方法,这个方法随后调用了RegisterRoutes()方法。RegisterRoutes()方法创建了路由表。
默认的路由表包含了一个路由(路由名是Default)、Default路由将Url的第一部分映射到控制器名,Url的第二部分映射到控制器动作,第3部分映射到一个叫id的参数。
假设在浏览器的地址栏中输入/Home/Index/5,默认地将参数映射成下面的内容:
Controller = Home
Action = Index
id = 5
当你请求URL /Home/Index/5时,将会执行这行代码:HomeController.Index(5)
Default路由包含了所有三个参数的默认默认值,如果不提供控制器,那么控制器的参数默认为Home,如果不提供动作,动作参数默认值为Index,如果你不提供id,id参数默认为空字符串。
例子练习1:
在地址栏中输入域名/Home
由于Default路由参数的默认值,输入这个Url会调用HomeController控制器中的Index()方法,并使用空字符串作为Id的参数值。
例子练习2 (不含参数的Index动作):
地址栏中输入域名/Home
当在浏览器地址栏中输入域名/Home的时候会调用Index这个方法,那么这个id将被忽略。
例子练习3(使用可空参数的Index动作):
Index()方法拥有一个整数参数。因为这个参数是一个可空参数(可以拥有Null值),因此可以调用Index()而不会引发错误。
例子练习4(含有Id参数的Index动作)
这个时候如果再使用 域名/Home的方式去访问,异常原因是id为null,需要为其赋值。就会报错,异常如下:
正确访问方式是:域名/Home/Index/5
3、创建自定义路由。
当在浏览器地址栏中输入 域名/Product/Pro的时候,自定义路由将收到的客户端请求映射到名为Pro的控制器,然后进行匹配,匹配失败后执行默认的参数项,就调用了Pro控制器中的Index方法。
4、创建路由约束。
根据上面的图3.1可得出,控制器为Pro的路由默认执行的方法是Details()方法、根据图3.2可看出Pro控制器中有一个Details()方法,里面需要一个int类型的参数。
当在浏览器地址栏中输入 域名/Pro/2 的时候会自动执行Details中的方法,然后找到Details视图。
当在浏览器地址栏中输入 域名/Pro/ABC,会出现以下异常信息。
根据路由规则只是想匹配包含合适整数prouctId的Url,在定义路由来限制与路由相匹配的Url时,可以使用约束。修改路由约束为:
这个时候在浏览器地址栏中输入 域名/Product/ABC的时候,不会再抛出图3.3的异常了,这个时候会弹出来一个404的错误。