在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
在本篇教程中,你将会了解到 ASP.NET MVC 中一个重要的组件。这个组件叫做 ASP.NET Routing,它负责将客户端请求的路径映射到特定的一个类(Controller)的一个函数(Action)。并且在教程的结尾,你将会掌握一个标准路由是如何映射到特定类的特定函数。 使用默认的路由表当你创建一个新的 ASP.NET MVC 应用程序的时候,就已经默认地在两个地方配置了 ASP.NET Routing。 首先,你可以在应用程序的配置文件(Web.config)找到与 ASP.NET Routing 有关的配置。这些节点如下所示: l system.web.httpModules l system.web.httpHandlers l system.webserver.modules l system.webserver.handlers section 在没有了解他们之前,请不要随意的更改或删除他们,否则可能导致你的应用程序或 ASP.NET Routing无法正常的工作。 其次更为重要的是,一张路由表是在全局文件(Global.asax)中创建的。这个特殊文件包含了ASP.NET 应用程序生命周期以及一些HTTP处理的事件。例如我们关注的路由表就是在 Application_Start事件中创建的。 Listing 1 – ~/Global.asax.cs using System.Web.Mvc; using System.Web.Routing; namespace MVCTestDemo { public class MvcApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // 路由名 "{controller}/{action}/{id}", // URL参数 new { controller = "Home", action = "Index", id = "" } // 默认值 ); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); } } }
当你的 ASPNET MVC应用程序首次启动的时,Application_Start()将会被系统自动调用。这个函数调用了一个静态函数RegisterRoutes(),从代码中可以看出,这个函数创建了一个路由表。 让我们来分析下 RegisterRoutes() 函数,这个函数包含了一个名为 Default 的路由器,这个路由器映射的第一部分是 Url的 Controller 名称。第二个部分将指示要访问这个 Controller下的哪一个 Action。而最后一个 id,则是指示要传递给 Action 的参数。 想像一下,当你在浏览器中键入如下所示的 URL 地址(除了主机和端口): /Home/Index/3 聪明的你可能已经看出,这样的地址意味着如下: controller = Home action = Index id = 3 没错,参照上面的代码,当你请求这样的URL时,就是这样的“解释”的。更深一步,这样的URL地址,就像是客户端调用了这样的函数。 HomeController.Index(3) 当然,这样只是一个示例。准确的说,前面的HomeController是一个我们定义的类,这个类包含一个Index( int id ) 函数。当运行的时候,ASP.NET MVC将会实例化一个HomeController,从而调用,并传递参数。 再来尝试一下,当你在请求这样的地址呢? /Home 很显然,你并没有给予系统Action和id部分。这个时候,我们回顾下上面的Listing 1的代码清单。是的,很清晰的告诉系统: l 当没有Controller时,将这个部分默认Home; l 当没有Action时,将这个部分默认Index; l 最后,当没有给定id时,将会默认一个空的字符串。 如果你没有理解这个部分,你参考下Listing 2的代码。 Listing 2 – ~/Controllers/HomeController.cs using System.Web.Mvc; namespace MVCTestDemo.Controllers { [HandleError] public class HomeController : Controller { public ActionResult Index(string id) { return View(); } } }
代码 Listing 2 部分,便是ASP.NET MVC 的 C 。C,就是Controller。ASP.NET 的命名规则就是NameController。 请求 /Home/Index/3 这样的 URL ,则调用的是 HomeController.Index( 3 ) 。 同理,倘若请求 /Test/About/3,自然调用的是TestController.About(3)。 不过,当你请求 /Home/Index/3 时,不一定要对这个参数3“负责”。你可以完全无视参数。Listing 3 可以清晰的表示。对于非Controller和Action的部分,你可以选择“爱理不理”。 Listing 3 – ~/Controllers/HomeController.cs using System.Web.Mvc; namespace MVCTestDemo.Controllers { [HandleError] public class HomeController : Controller { public ActionResult Index() { return View(); } } }
根据我们注册的路由表,可以得知:在默认的情况下,当我们请求/Home路径的时候,视同调用了这样的函数(当参数为string数据类型时,参考代码Listing 2): HomeController.Index(String.Empty) 当然,从字面上可以理解配置的参数(id)明显是一个整型。你完全可以选择使用int来作为数据类型。但是请注意,我们所配置的是一个默认为空字符串的id,如果你仅仅使用整型,将会抛出异常(无法将null转换为Int32),你完全可以使用可空类型(int?)。 |
请发表评论