1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Programming ASP.NET MVC-Fundamentals of ASP.NET MVC(四)Routing

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

时间:2019-03-14 15:47:00

相关推荐

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

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

路径选择

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

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

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

下面是 routing图:

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

配置路由

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

1、名称唯一

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

2、URL模式

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

3、默认值

提供与对应字段的默认值

4、约束

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

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

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

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。