MVC路由机制
路由机制概述
1.匹配传入的请求(该请求不匹配服务器文件系统中文件),并将这些请求映射到控制器操作(Controller中的action方法)
MVC基本的处理流程:来了一个URL请求, 从中找到Controller和Action的值, 将请求传递给Controller处理. Controller获取Model数据对象, 并且将Model传递给View, 最后View负责呈现页面。(说白了,就是来了一个URL,找到一个控制器中的方法)(路由是模式,有参数,通过URL中的参数,就可以对应找到符合这种路由模式的方法)
Routing的作用:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "GlobalIndex", id = UrlParameter.Optional }
);
|
路由URL模式 |
默认值 |
匹配URL模式的实例 |
|
{controller}/{action}/{id} |
New {id=“”} |
/albums/display/123 /albums/display |
|
{controller}/{action}/{id} |
New {controller=“home”, action=“index”, id=“”} |
/albums/display/123 /albums/display /albums / |
public ActionResult Index()
public ActionResult Index(int id)
类型 MVCDemo.Controllers.TestController 的 System.Web.Mvc.ActionResult Index()
类型 MVCDemo.Controllers.TestController 的 System.Web.Mvc.ActionResult Index(Int32)
routes.MapRoute("showBlogRoute",
"blog/post/{id}",
new { controller =“CMS”,action = “Show”,id=“”});
routes.MapRoute("blogRoute",
“blog/{action}/{id}",
new { controller = "CMS", action = “Index", id = “”});
routes.MapRoute(“DefaultRoute”, // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id =“”} // 参数默认值
);
routes.MapRoute("simple",
"archive/{year}/{month}/{day}",
new{controller="blog",action="search",year="",month="",day=""},
new{
year=@"\d{2}|\d{4}",//只能是两位或四位数字
month=@"\d{1,2}",//只能使用一位或两位数字
day=@"\d{1,2}"//只能使用一位或两位数字
});
2.构造传出的URL,用来响应控制器中的操作
<div>
@Html.ActionLink("点击","Click","Home");
</div>
RouteCollection. GetVirtualPath方法
|
方法 |
说明 |
|
如果具有指定的上下文和参数值,则返回与路由关联的 URL 路径的相关信息。 |
|
|
如果具有指定的上下文、路由名称和参数值,则返回与命名路由关联的 URL 路径的相关信息。 |
第一个方法获得了当前路由的一些信息和用户指定的路由值(字典)去选择目标路由。
1. 路由系统然后会循环整个路由表,通过GetVirtualPath方法向每一个路由发问:“Can you generate a URL given these parameters?”
2. 如果答案是Yes,那么就会返回一个VirtualPathData实例,包括URL和与匹配相关的一些其他信息。如果答案是NO,则返回一个Null,路由系统会转向下一条路由,直到遍历整个路由表。
举例:
如果我们在路由机制中定义了一个
routes.MapRoute(
name: "test",
url: "test/look/{id}",
defaults: new { controller = "Home", action = "Click", id = UrlParameter.Optional }
); routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
在视图中写:
<div>
@Html.ActionLink("测试","look","test");
</div> <div>
@Html.ActionLink("点击","Click","Home");
</div>
最终的结果是 不管点击哪一个按钮,都会触发方法Click
public class HomeController : Controller
{
//
// GET: /Home/ public ActionResult Index()
{
return View();
} public ActionResult Click()
{
return View();
} }
但是显示的URL都是

如果我们在地址栏中直接输入 test/look或者Home/Click 都是正确的。
MVC路由机制的更多相关文章
- WebApi-1 与MVC路由机制比较
在MVC里面,默认路由机制是通过url路径去匹配对应的action方法 public class RouteConfig { public static void RegisterRoutes(Rou ...
- asp.net MVC 路由机制
1:ASP.NET的路由机制主要有两种用途: -->1:匹配请求的Url,将这些请求映射到控制器 -->2:选择一个匹配的路由,构造出一个Url 2:ASP.NET路由机制与URL重写的区 ...
- asp.net MVC 路由机制 Route
1:ASP.NET的路由机制主要有两种用途: -->1:匹配请求的Url,将这些请求映射到控制器 -->2:选择一个匹配的路由,构造出一个Url 2:ASP.NET路由机制与URL重写的区 ...
- MVC路由机制(转)
今天我来缕一下MVC的路由机制,因为使用MVC已经快一年了,之前也只是上手,没有系统去理会.项目完了,结合实际使用,回过头来深入一下. MVC 学习索引(点击即可) 一个请求进入IIS后 传统ASP. ...
- Asp.net MVC路由机制
C:/Windows/Microsoft.NET/Framwork/v4.0.30319/config/web.config-> httpModules-> System.Web.Rout ...
- C# 通过反射实现类似MVC路由的机制
最近封装了个功能非常类似于MVC的路由.//MVC路由机制先找到Controller Action 什么是反射 反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获 得.NET ...
- C#进阶系列——WebApi 路由机制剖析:你准备好了吗?
前言:从MVC到WebApi,路由机制一直是伴随着这些技术的一个重要组成部分. 它可以很简单:如果你仅仅只需要会用一些简单的路由,如/Home/Index,那么你只需要配置一个默认路由就能简单搞定: ...
- 【C#】 WebApi 路由机制剖析
C#进阶系列——WebApi 路由机制剖析:你准备好了吗? 转自:https://blog.csdn.net/wulex/article/details/71601478 2017年05月11日 10 ...
- C#进阶系列——WebApi 路由机制剖析:你准备好了吗? 转载https://www.cnblogs.com/landeanfen/p/5501490.html
阅读目录 一.MVC和WebApi路由机制比较 1.MVC里面的路由 2.WebApi里面的路由 二.WebApi路由基础 1.默认路由 2.自定义路由 3.路由原理 三.WebApi路由过程 1.根 ...
随机推荐
- php 链式操作的实现 学习记录
php 面向对象中实现链式操作的关键部分:调用的方法中返回当前对象 ,从而实现链式操作: <?php namespace commom; class db { public function w ...
- 2015 UESTC Training for Search Algorithm & String - J - 全都是秋实大哥 【KMP】
给出一个字符串,求每个前缀的最小循环节长度,并输出整个字符串的最小循环节.字符串长度为3*10^6 找循环节这种问题还是要用KMP对于长度为i的字符串 i%(i-f[i])==0 此时,它的最小循环节 ...
- HDU 4455(dp)
题意:给定一个序列ai,个数为n.再给出一系列w:对于每个w,求序列中,所有长度为w的连续子串中的权值和,子串权值为子串中不同数的个数. 思路:动态规划,用dp[w]表示当前长度为w的时候的权值和.显 ...
- datagrid加下拉列表dropdownlist
datagrid中代码: <asp:datagrid id="dgList" runat="server" ItemStyle-HorizontalAli ...
- node.js动态调试
supervisor node ./bin/www npm start 不会动态运行和调试程序,相当于动态部署
- sql语句分页代码
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO alter proc sp_SelectInfomationByKeyWord--创建一个存储过程 - ...
- GCD多线程 在子线程中获取网络图片 在主线程更新
子线程中得所有数据都可以直接拿到主线程中使用 //当触摸屏幕的时候,从网络上下载一张图片到控制器的view上显示 -(void)touchesBegan:(NSSet *)touches withEv ...
- Android Studio使用教程图文详解
谷歌表示Android Studio 1.0 能让开发者“更快更有生产力”,并认为它可以代替 Eclipse,同时为Eclipse 用户提供迁移步骤.代码自动提示.运行响应速度.都比Eclipse来的 ...
- CSS 布局Float 【2】
1.页面标准文档流.浮动层.float属性 1.1 文档流 HTML页面的标准文档流(默认布局)是:从上到下,从左到右,遇块(块级元素)换行. 1.2 浮动层 浮动层:给元素的float属性赋值后,就 ...
- jQuery截取字符串插件区分中英文
jQuery截取字符串插件区分中英文:截取字符串功能在大量网站都有应用,比如新闻列表这样的功能,因为新闻的标题长途未必都是恰如其分的,所以要根据需要截取指定长度的字符串,下面就分享一个jQuery实现 ...