你的位置:首页 > ASP.net教程

[ASP.net教程]ASP.NET MVC——URL路由


在MVC之前,ASP.NET假设请求的URL与服务器上的文件之间有关联,服务器接受请求,并输出相应的文件。而在引入MVC后,请求是由控制器的动作方法来处理的。为了处理URL,便引入了路由系统。

首先我们来创建一个基础项目用来演示。代码如下:

1   public class HomeController : Controller2   {3     public ActionResult Index()4     {5       ViewBag.Controller = "Home";6       ViewBag.Action = "Index";7       return View("ActionName");8     }
}

1   public class AdminController : Controller2   {3     public ActionResult Index()4     {5       ViewBag.Controller = "Admin";6       ViewBag.Action = "Index";7       return View("ActionName");8     }9   }

有两个controller,它们都返回视图“ActionName”,我们创建一个Shared文件夹并在其中新建一个”ActionName“视图,代码如下:

@{  Layout = null;}<!DOCTYPE html><html><head>  <meta name="viewport" content="width=device-width" />  <title>ActionName</title></head><body>  <div>The controller is: @ViewBag.Controller</div>  <div>The action is: @ViewBag.Action</div></body></html>

1. 创建并注册一条简单的路由

         路由是在Routefig.cs文件中定义的,我们打开文件,会看到有一条默认的路由如下:

routes.MapRoute(        name: "Default",        url: "{controller}/{action}/{id}",        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }        );

  我们可以删掉这条路由,手工来创建。例如这样:

routes.MapRoute("MyRoute", "{controller}/{action}");

  我们将URL写为 localhost:端口/Admin/Index,我们可以看到浏览器成功转到了Admin控制器的Index动作方法。

2.定义默认值

  当我们之前运行程序时,会发现当URL为根地址,会发现出错。其实是因为它不匹配已经定义的路由。那么我们修改之前的路由来为其添加默认值。

 routes.MapRoute("MyRoute", "{controller}/{action}", new { controller = "Home", action = "Index" });

       现在当URL为根地址时,浏览器会自动导航到我们所定义的默认值。

     3.使用静态URL

       我们添加这样一条路由。

routes.MapRoute("", "Public/{controller}/{action}", new { controller = "Home", action = "Index" });

       URL就会变成 localhost:端口/Public/Admin/Index。Public片段就是静态的。

      

Tip:这里要提一下路由的顺序MapRoute方法会把一条路由添加到RouteCollection集合的末尾,即一般是按添加的顺序被运用的。路由系统试图根据最先被定义的路由模式来匹配输入的URL,只有在不匹配时才会继续对下一条路由进行处理,直到找到匹配的一条。