zoukankan      html  css  js  c++  java
  • ASP.NET MVC 的URL路由介绍

    在这个教程中,向你介绍每个ASP.NET MVC一个重要的特点叫做URL路由。URL路由模块是负责映射从浏览器请求到特定的控制器动作。

    在教程的第一部分,你将学习标准路由表如何映射到控制器的动作。在教程第二部分,你将学习如何修改默认路由表成为自定义路由。

    使用默认路由表

    当你创建一个新的ASP.NET MVC 应用程序,应用程序已经配置了默认的URL路由。URL路由在两个地方设置。

    第一,URL路由配置在你的应用程序WEB配置文件中(Web.config文件)。文件中有四个有关路由的配置节:system.web.httpModules节,system.web.httpHandlers节,system.webserver.modules节,和system.webserver.handlers节。小心不要删除这些配置节,因为没有这些配置节路由将不在工作。

    第二,更为重要的是,一个路由表在应用程序的Global.asax文件中创建。Global.asax文件是一个特别的文件,它包含了ASP.NET应用程序生命周期事件处理。当Application Start事件开始,路由被创建。

    图1是一个ASP.NET MVC应用程序的默认Global.asax文件。

    图 1 – Global.asax.cs

    当一个ASP.NET MVC应用程序第一次运行时, Application_Start()方法被调用。这个方法,又调用RegisterRoutes()方法,RegisterRoutes()方法创建了路由表。

    默认的路由本包含一个路由(命名Default).默认路由第一段URL映射到一个控制器名字,第二段URL映射到一个动作,第三段映射到一个参数叫Id.

    想象你在浏览器地址栏输入以下URL:

    /Home/Index/3

    默认路由映射以下这些参数:

    controller = Home

    action = Index

    id = 3

    当你请求URL /Home/Index/3,以下代码会被执行:

    HomeController.Index(3)

    默认路由包括默认的三个参数。如果你提供一个控制器,那默认控制器参数值就是Home.如果你不提供一个动作,那默认动作参数的值就是Index.最后,如果你不提供一个id,那id参数默认是一个空字符串。

    让我们看一些默认路由如何映射URL到控制器动作的示例。想象你在浏览器地址栏输入以下URL:

    /Home

    因为默认路由参数,这个URL会引起HomeController 类的Index()方法如图2被调用。

    图2 – HomeController.cs

    在图2中, HomeController类包含一个叫Index()的方法,它接受单个叫Id的参数。URL /Home 引起值为空字符串Id参数的 Index()被调用。

    因为ASP.NET MVC框架调用控制器动作这个方式,the URL /Home 也匹配图3中的HomeController类 Index()方法。

    图 3 – HomeController.cs (无参数的Index action) 

    图3中这个Index()方法不接受任何参数。URL /Home 将引起Index()的方法被调用。URL /Home/Index/3 也调用这个方法。(Id是被忽略的)

    URL /Home 也匹配图4 中HomeController类Index()方法

    图 4 – HomeController.cs (可空参数Index action) 

    图4中, Index()有一个整型方法. 因为参数是可空类型 (值能够为空), Index() 调用不能产生错误。

    最后,图5中调用Index(),URL /Home引起一个异常从Id参数不是可空类型参数,如果你尝试调用Index()方法,你得来以一个错误页面:

    图5 – HomeController.cs (Index action with) 
     

    URL /Home/Index/3, 另一方面, 图5中控制器 Index 动作是可以工作的。The 请求 /Home/Index/3 引发带一个值为3 Index() 方法被调用。

    创建自定义路由

    对于许多简碟的ASP.NET MVC 应用程序,默认路由表足够了。但是,你可能发现你有特别路由的需要。在这个案例中,你能创建一个自定义路由。

    想象下,例如,你写一个BLOG应用程序,你可能要处理像这样的请求:

    /Archive/12-25-2009

    当一个用户发起这个请求,你要返回一个符合12/25/2009日期的BLOG。因此处理这样的请求,你需要创建一个自定义路由。

    图6中Global.asax文件包含一个新的自定义路由,叫做Blog,处理像这样/Archive/entry date的请求。

    图 6 – Global.asax (自定义路由)

    路由表中你增加的路由顺序是很重要的。我们自定义Blog路由是增加在默认路由之前的。假如你搞反了,那默认路由将永远替代调用自定义路由。

    自定义Blog路由匹配任何/Archive/开始请求,所以它匹配所有以下URLs:

    /Archive/12-25-2009

    /Archive/10-6-2004

    /Archive/apple

    这个自定义路由映射进来的请求到一个名叫Archive控制器同时调用Entry()方法,当Entry()方法被调用时,进入日期转成一个名叫entryDate参数。

    在图7中 你能使用控制器与BLOG自定义路由。

    图 7 – ArchiveController.cs

    注意图7中的Entry()方法接受一个DateTime 类型的参数.ASP.NET MVC 框架是智能的,它能从URL的DateTime的值自动的转换为entry date。如果entry date从URL不能转换为DateTime,将引出错误。

    总结

    教程的目的提供你关于URL路由一段简短的介绍。第一,我们检验了你拿到一个新的ASP.NET MVC 应用程序的默认路由表。你学习到了默认路由表是如何把URL映到控制器动作的。

    接下来,你学习了如何创建一个自定义路由表。你学习了如何在Global.asax文件中增加一个自定义路由表描述blog进入点。我们讨论如何映射请求blog进入点到一个名叫ArchiveController的控制器名叫Entry()的动作。

  • 相关阅读:
    leetcode 78. 子集 JAVA
    leetcode 91. 解码方法 JAVA
    leetcode 75. 颜色分类 JAVA
    leetcode 74 搜索二维矩阵 java
    leetcode 84. 柱状图中最大的矩形 JAVA
    last occurance
    first occurance
    classical binary search
    LC.234.Palindrome Linked List
    LC.142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/eric-qin/p/4326101.html
Copyright © 2011-2022 走看看