zoukankan      html  css  js  c++  java
  • ASP.NET MVC路由详解

    1.什么是路由

    一种URL(统一资源定位符)的体现方式,将URL映射到方法的调用。

    在 Web Form 应用,每个 URL 必须匹配一个 .aspx 物理文件,如:http://domain/bar.aspx 必须有一个用于响应渲染的文件 bar.aspx。ASP.Net MVC 则通过引入 Routing 来消除必须使用物理文件映射 URL 的弊端。路由使我们能够定义映射到请求处理程序的 URL 模式。请求处理程序在 WebForm 中是 .aspx 文件,在 MVC 中是 Controller 以及 Action 方法。例如:http://domain/foo

    注:路由并非mvc专属,它是建立在.NET Framework上的一个组件。

    2.使用路由的优势

    ①根据系统需求,灵活的划分请求规则

    ②防止注入式攻击,提高安全性。传统URL和磁盘上的文件一一对应,通过URL就能确定站点目录,而路由把请求映射到控制器。

    ③利于搜索引擎优化,可以将URL请求统一规范,以后维护中,如果页面发生变化,URL可以保持不变。

    3.如何定义路由

    新建一个空的ASP.NET MVC项目,目录如下:

    双击打开Global.asax,如下:

    注:Application_start()是程序入口方法,只在打开网站时执行一次。

    RouteConfig.cs文件位于App_Start文件夹中,如下:

    路由模板指的是:域名+端口号之后的内容。

    MVC工作过程:

    一、URL模式

    上面的 URL 中的参数值是:“{controller}/{action}/{id}”,称之为 URL 模式。

    占位符:字符或字符串,如“x”、“id”、“year”等。

    字面量:字符或字符串,最常见的是“/”。

    注:不能以“/”或“~”开头,不能包含“?”,占位符不能连续。

    URL模式示例总结:

    匹配要求:

    1.字面量必须完全一致。

    2.不区分大小写。

    3.没有包含在大括号内的信息作为常量看待,如上面的Course。

    定义多个URL模式的路由:

    注:如果一个URL能匹配多个路由,则默认使用第一个匹配的路由。

    UrlPrameter.Optional的作用是作为id的默认值,并可以让“/Home/Index”或“/Home”能正常匹配。

    关于占位符:

    示例:https://www.cnblogs.com/1016391912pm/p/12088733.html

    {controller}和{action}是必不可少的,controller代表控制器(示例中的Test),action代表方法(示例中的Index),如果没有定义的话就会因找不到路径而出错。

    像{aa}/{bb}/{cc}这种占位符只是起到占位作用,系统不会将其解析为控制器或方法。

    路由数据的存储和映射

    在ASP.NET MVC中,路由数据存储在RouteData中,方式为键值对,和字典相似。

    路由数据:RouteDate.Values 是RouteValueDictionary类型。RouteData定义为视图和控制器基类的属性。

    可以在视图中遍历RouteData.Values,如下:

    输出:

    *匹配

    *来匹配 URL 剩余部分,示例代码如下:

    路由约束

    constraints代表约束:

    二、特性路由

    1.简单的特性路由

    在RegisterRoutes方法中添加:

    routes.MapMvcAttributeRoutes();

    在控制器类中的方法上添加特性:

    我们在浏览器中就可以通过地址http://localhost:46198/haha来运行这个方法,并指向视图中的Index.cshtml

    可以设置多个特性,则可以通过每一个特性名来访问。

    2.使用占位符

    可以通过http://localhost:46198/hello/1来访问Second方法

    3.为每一个方法设置路由

    有时一个控制器中的路由遵循相似的路由模板,可以这样设置:

    这样控制器类中的方法都可以通过home/方法名来访问。(可以在方法名上重新设置,覆盖这种方式)

    4.路由约束

    对于[Route("home/{id}")],我们希望的是id是int类型的,则可以这样设置:[Route("home/{id:int}")]

    一些内联约束:

    5.路由默认值

    [Route("home/{action=Index}")]

  • 相关阅读:
    三数之和
    罗马数字与整数
    Oracle 开启或关闭归档
    Oracle RMAN scripts to delete archivelog
    Oracle check TBS usage
    Oracle kill locked sessions
    场景9 深入RAC运行原理
    场景7 Data Guard
    场景4 Data Warehouse Management 数据仓库
    场景5 Performance Management
  • 原文地址:https://www.cnblogs.com/1016391912pm/p/12735571.html
Copyright © 2011-2022 走看看