编程语言
首页 > 编程语言> > 【ASP.NET MVC4】第十课:网址路由、自定义路由

【ASP.NET MVC4】第十课:网址路由、自定义路由

作者:互联网

知识点:网址路由的概念、自定义路由

路由 - 源自网络中路由器的概念,负责网络中数据的传输路径。在 ASP.NET MVC 中,URL 路由模块负责从浏览器请求到特定的控制器动作的映射。任何一个请求都离不开路由,所以路由非常重要,理解路由的概念,我们将能理解 MVC 处理请求的整个过程,灵活地定义系统各种页面的访问规则。

 

1、网址路由概述

网址路由(URL Routing)并不是MVC中独有的,相对于 MVC 是独立的,单独存在的,它的定义在 System.Web.Routing 命名空间中,网址路由能为传统的 ASP.NET 应用程序服务,也能为 ASP.NET MVC 应用程序服务。网址路由在 ASP.NET MVC 中有两个主要用途,一是比对通过浏览器传递来的 HTTP 请求,二是将网址重写后返回给浏览器。

1.1  为什么要定义路由?

在项目开发中,定义路由( URL 访问规则)占用的开发量很小,但是非常重要,因为任何请求都离不开路由。

各个电商网站的 URL 使用非常灵活:

使用路由的好处:

 

1.2   ASP.NET MVC 路由系统主要职责

路由是将来自浏览器的请求映射到 MVC 的 Controller Action ,从而返回网址路由。路由的体现有两部分,一是路由注册,二使请求映射。

路由注册:就是向路由表(RouteCollection)中添加路由。(也就是向 RouteConfig.cs 文件中添加路由)

请求映射:是当 HTTP 提出请求后,URL 会进行网址路由的比对,按照 ASP.NET MVC Routing 的规则,由上而下一条一条比对,直到比对到符合 HTTP 请求的网址为止。注意,所有的网址比对是从“http://localhost/”之后开始比对的。

 

1.3 回顾 ASP.NET MVC 的工作过程

新建一个 ASP.NET MVC 程序,程序一启动,就会调用全局应用程序配置类,在里面开始注册路由。路由表里的路由,都会即时的注册到服务器中。当用户发出请求时,要从路由表里进行查找,看符合哪一个路由规则,然后进行解析,找到控制器和动作方法,调用 Model 去完成,最后根据规则返回视图,再响应给用户。

 

2、 ASP.NET MVC 默认路由

新建一个默认的 ASP.NET MVC 应用程序,系统会默认的生成包含基本功能的应用程序,查看这些生成的代码,可以帮助我们更好的理解 ASP.NET MVC 。可以先研究一下以下文件代码:Web.config 、Global.asax 和 App_Start 文件夹里的 RouteConfig.cs 文件。

2.1  RouteConfig.cs 中的 URL 规则定义

URL 模式:

 

2.2   使用自定义路由访问

示例练习1:使用自定义路由访问页面

第一步,新建一个空 ASP.NET MVC 项目,并在 Controllers 文件夹中添加一个 Home 控制器,给 Index 方法添加一个视图,在视图上写一句测试语句。

第二步,写自定义路由。方法:打开 App_Start 文件夹里的 RouteConfig.cs 文件。

关键代码:

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            //忽略处理ASP.NET的Web资源文件(程序默认写好的)
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");   

            //自定义一个路由规则(程序开发人员写的)
            routes.MapRoute(
                name: "Test1",
                url: "{first}/{second}/{third}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                constraints: new { first = "news", second = "show", third = 2 }
            );
            
            //路由规则(程序默认写好的)
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index",  id = UrlParameter.Optional }
            );
        }
    }

第三步,运行测试。程序运行后,在浏览器地址栏里,分别输入以下url信息,观察结果,并思考原因。

自定义路由

2.2.1   routes.MapRoute()方法的使用

使用 routes.MapRoute() 方法,定义路由,方法中的参数介绍(也可以在程序中,在方法名上右键“转到定义”查看方法的具体使用):

 

2.2.2  routes.IgnoreRoute("{resource}.axd/{*pathInfo}")的作用

{resource}.axd 表示后缀名为.axd所有资源 如webresource.axd

{*pathInfo} 表示所有路径

作用:使路由系统忽略处理ASP.NET的Web资源文件(WebResource.axd或ScriptResource.axd).

 

2.2.3  UrlParameter.Optional 参数的作用

该参数可以作为路由参数的默认值。当需要让 "/Home/Index" 或 "/Home" 能正常匹配,但又不希望赋一个无意义的值,可以使用该参数。

 

2.2.4  多个路由的匹配的优先顺序

匹配第一个,后面的忽略

(参照示例中,自定义的路由,要放在上面,否则无法起作用)

 

2.3   URL 模式的语法相关

定义语法:{占位符1}字面量{占位符2}字面量…{占位符n}字面量n

举例:{table}/Details.aspx 、 News/{action}/{id}  、{pro}-{city}/{action}

注意:

 

2.4   URL 模式匹配产生路由数据的示例

在 ASP.NET MVC 路由系统中,RouteData 对象用来保存 URL 模式和实际 URL 匹配产生的路由数据。路由数据保存方式为:“键-值”对,RouteData 是视图基类和控制器基类的属性。

 

 

 

匹配要求:

{controller} 和 {action} 在程序运行中的映射:

 

2.5  路由匹配总结

2.5.1  关于{controller}/{action}

2.5.2  其他占位符

2.5.3  匹配顺序

 

 

=======这里是结束分割线========

标签:MVC4,ASP,自定义,URL,MVC,action,NET,路由
来源: https://blog.csdn.net/dnruanjian/article/details/116978314