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()的动作。

  • 相关阅读:
    歌德巴赫猜想
    Dice Possibility
    ACboy needs your help(简单DP)
    Bag of mice(概率DP)
    合唱队形(LIS)
    地震预测(模拟链表)
    关于KMP算法的感想
    Card Collector
    LOOPS
    Aeroplane chess(简单概率dp)
  • 原文地址:https://www.cnblogs.com/eric-qin/p/4326101.html
Copyright © 2011-2022 走看看