ASP.NET MVC——URL路由
2018-06-22 06:03:22来源:未知 阅读 ()
在MVC之前,ASP.NET假设请求的URL与服务器上的文件之间有关联,服务器接受请求,并输出相应的文件。而在引入MVC后,请求是由控制器的动作方法来处理的。为了处理URL,便引入了路由系统。
首先我们来创建一个基础项目用来演示。代码如下:
1 public class HomeController : Controller 2 { 3 public ActionResult Index() 4 { 5 ViewBag.Controller = "Home"; 6 ViewBag.Action = "Index"; 7 return View("ActionName"); 8 }
}
1 public class AdminController : Controller 2 { 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,只有在不匹配时才会继续对下一条路由进行处理,直到找到匹配的一条。
4. 定义自定义片段变量
我们除了使用这些内建的片段变量,也可以定义自己的变量,比如,新建以下路由:
routes.MapRoute("MyRoute", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "DefaultId"});
并且修改HomeController如下:
1 public ActionResult Index() 2 { 3 ViewBag.Controller = "Home"; 4 ViewBag.Action = "Index"; 5 return View("ActionName"); 6 } 7 public ActionResult CustomVariable() 8 { 9 ViewBag.Controller = "Home"; 10 ViewBag.Action = "CustomVariable"; 11 ViewBag.CustomVariable = RouteData.Values["id"]; 12 return View(); 13 }
添加视图CustomVariable,代码如下:
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>CustomVariable</title> </head> <body> <div>The controller is: @ViewBag.Controller</div> <div>The action is: @ViewBag.Action</div> <div>The custom variable is: @ViewBag.CustomVariable</div> </body> </html>
启动程序,并导航到/Home/CustomVariable/Hello,ViewBag会接受到这个自定义片段变量的值,并将其传递为视图。
5. 定义可变路由
可变路由可以以一个单一的路由,对任意长度的URL进行路由。通过一个叫做“全匹配”的片段变量,并以“*”作为其前缀,便可以定义对可变片段数的支持。代码清单如下:
routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
这条路由将匹配任何URL,无论URL包含多少片段数,前三个片段分别用于设置controller、action、id变量的值,如果URL含有更多片段,则它们全部赋给catchall变量。注意,由catchall捕获的片段是以“片段/片段/片段”的形式表示的。你需要对这个字符进行处理,把它们分解成一个一个片段。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- asp.net源程序编译为dll文件并调用的实现过程 2020-03-29
- Asp.net MVC SignalR来做实时Web聊天实例代码 2020-03-29
- ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据 2020-03-29
- Asp.Net中WebForm的生命周期 2020-03-29
- ASP.NET使用Ajax返回Json对象的方法 2020-03-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash