Programming ASP.NET MVC-Fundamentals of ASP.NET MVC(四)Routing

                 在说路径选择之前,我们先来看一下, ASP.NET MVC 的请求生命周期:

                  

          路径选择

          所有ASP.NET MVC的通讯开始都像其它的网站那样,用一个URL请求。也就是说,仅管在URL中没有提到ASP.NET Routing framework,但是ASP.NET Routing framework是每一个ASP.NET MVC请求的核心。

          简单地说,ASP.NET Routing是一个模式匹配系统。在程序启动的时候,会注册一个或者多个的framework'route 表用来告诉routing system遇到匹配的模式应该怎么做。在运行时,当routing engine在接收到一个请求的时候,它会用这个请求的URL来和注册的URL patterns匹配。

          当routing engine在它的route table发现匹配的模式后,它将会把请求提交到对应的处理程序。

          下面是 ASP.NET routing图:


            加外,如果请求的URL没有与任何注册的路由模式匹配的话,routing engine会通过返回一个404来表明无法找到对应的处理程序。

           

            配置路由

            ASP.NET MVC routes负责决定哪个controller的方法(或者controller的动作)来执行给定的URL。ASP.NET MVC routes具有如下属性:

            1、名称唯一

             一个名称必须对应唯一的的route

            2、URL模式

            通过简单的模式把一个URL解析成具有意义的字段。

            3、默认值

            提供与对应字段的默认值

            4、约束

            一系列的约束应用到URL模式上,用来严格的定义URL对应的路由模式。

          

           默认的ASP.NET MVC 工程模板会添加一个一般的route,用如下的约束来将一个URL请求切割成三部分字段。wrapped with brackets ({}): “controller”, “action”, and “id”:

           {controller}/{action}/{id}

            route pattern通过调用程序运行时MapRoute()的扩展方法来进行注册。

            方法位于App_Start/RouteConfig.cs

            

 public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
             除了提供一个名字和URL模式,route也定义了一系列的默认参数用来处理符合route pattern的URL。


             这是ASP。net利用“约定优于配置”的一个典型例子,当应用程序启动后,Asp.net mvc通过查找在所有可用程序集中实现了 System.Web.Mvc.IController(或者继承自实现该接口的类,如: System.Web.Mvc.Controller)接口的class,而且要是以controller结尾。当 routing framework 通过使用这个列表找到对应的controller后,它会从该controller class去掉名称的controller后缀。比如说:AuctionsController is referred to as Auctions, and Home Controller 代表 Home


              接下来还有一点要说的是route是忽略大小写的。

             URL route patterns默认是相当于根目录的,不用添加“/”或者“~/”  Route patterns如果包含这些字符串的话,会抛出异常。


              我们已经看到,URL routes可以包换丰富的信息。为了处理一个ASP.NET MVC请求,routing engine要找到两个重要的信息:controller和action.这样,routing engin才可以把信息通过asp.net runtime  create and execute the specified action of the appropriate  controller.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值