05 入门 - 浅谈 ASP.NET MVC程序的工作原理
本篇内容
1. Global.asax文件
2. RouteConfig.cs文件
3. 视图命名和寻址的规则
前面创建了一个简单的ASP.NET MVC程序,虽然整个项目直接可以部署运行,一切都是按照约定好的执行。
但是系统里面的一些细节还是需要我们了解的,这有助于我们对整个ASP.NET MVC程序如何工作进行系统性的理解。
当然,在这里我们只简单介绍一下其执行过程,详细的生命周期等后面再逐步学习。
除了上面介绍的Controller控制器、View视图等,我们还需要关注Global.asax、RouteConfig.cs以及视图命名及寻址的规则。
(当然,在这里你只需要有个大概的认识就行了,东西不是一次性学会并掌握的。)
一、Global.asax文件
默认创建的global.asax文件代码如下所示:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
在ASP.NET MVC程序中,Global.asax主要是系统启动时做一些全局性的初始化操作。
从上面的代码可以看出,它调用App_Start文件夹中的相关类来完成的这些工作。
例如用RouteConfig.RegisterRoutes()来完成路由的注册,调用FilterConfig.ResiterGlobalFilters()来完成全局过滤器的注册等。
二、RouteConfig.cs文件
默认创建的RouteConfig.cs文件代码如下所示:
public class RouteConfig
{
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 }
);
}
}
这里RegisterRoutes()方法的作用就是定义路由,即定义客户端通过URL访问ASP.NET MVC程序的规则。
可以注意到有一段代码“{controller}/{action}/{id}”,其实就是定义的URL规则。
例如,使用“http://localhost:1996/Home/Index/778078163”访问系统,系统会把Home作为控制器的名字,从而自动对应到“/Controllers”目录中找到名为“HomeController”的控制器,然后把“Index”作为上面找到的控制器中的“Index()”操作方法,最后将“778078163”作为“Index()”方法的参数传入,得到相应的结果。
另外,“http://localhost:1996/Home/Index”和“http://localhost:1996/Home”都能达到同样的效果,主要是defaults这行代码设置的默认值在起作用。
关于路由规则,后面我们会单独一篇内容专门学习。
三、视图命名和寻址的规则
在控制器中,使用View()方法调用视图,返回和动作方法同名的视图,但是却没有显式提供视图的位置。
其实这这里依赖的就是视图的寻址规则,即会按照规则从规定的路径去寻找这个命名的视图。
在ASP.NET MVC中,有一条寻址规则,就是会从Views文件夹下和控制器名同名的文件夹中寻找(如/Views/Home)。
因此,一般创建视图也会按照这样的寻址规则,否则将出现找不到视图的错误。
例如在这里,我讲程序默认的/Views/Home/Index.cshtml视图删掉,这样,当我访问Home/Index视图的的时候,就会出现如图这样的错误:
我们也能从此发现,它默认是从哪找的这个页面从而显示出来的。

对于一般的ASP.NET MVC程序来说,就是如图所示的一个处理过程:

1. 最开始是应用程序启动、注册路由访问的规则;
2. 当请求到来时,寻找路由表,找到负责处理的控制器和操作方法,将附带的参数等交给该方法进行处理;
3. 方法处理完毕,根据寻址规则找到视图,由视图负责呈现指定的页面。
05 入门 - 浅谈 ASP.NET MVC程序的工作原理的更多相关文章
- 【ASP.NET MVC系列】浅谈ASP.NET MVC八大类扩展(上篇)
lASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC运行过程
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 视图与控制器传递数据
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 控制器
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 路由
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC资源过滤和授权
最近比较忙,博客很久没更新了,很多博友问何时更新博文,因此,今天就花了点时间,写了本篇文章,但愿大家喜欢. 本篇文章不适合初学者,需要对ASP.NET MVC具有一定基础. 本篇文章主要从ASP.NE ...
- 浅谈Asp.net Mvc之Action如何传多个参数的方法
最近,工作上有一个需要:用户查询日志文件信息,查看某一个具体日志信息,可能同时查看该日志所在日期的其他日志信息列表. 为完成此功能,我打算在URL中传入了两个参数,一个记录此日志时间,另外一个记录日志 ...
- 【ASP.NET MVC系列】浅谈ASP.NET 程序发布过程
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
随机推荐
- 流程控制之for循环
目录 语法(掌握) for+break for+continue for循环嵌套(掌握) for+else(掌握) for循环实现loading(了解) 语法(掌握) 为什么有了while循环,还需要 ...
- SpringBoot 2 要不要升级
目录 前言 一.SpringBoot 简史 二.SpringBoot 2 的变化 三.要不要升级 前言 在谈SpringBoot 2.x 之前,先来聊点别的: 首先是Java 语言,这门长期占据编程语 ...
- 在MySQL中实现Rank高级排名函数【转】
MySQL中没有Rank排名函数,当我们需要查询排名时,只能使用MySQL数据库中的基本查询语句来查询普通排名.尽管如此,可不要小瞧基础而简单的查询语句,我们可以利用其来达到Rank函数一样的高级排名 ...
- .NET CAD二次开发学习 对称画线功能
[CommandMethod("CBline")] //对称画线 public void CBline() { Document doc = Application.Documen ...
- ParameterizedType理解笔记
首先分享这篇文章<ParameterizedType详解> https://blog.csdn.net/JustBeauty/article/details/81116144 Parame ...
- 使用CSS3的clip-path(裁剪路径)实现剪贴区域的显示以及实例实现图片渐变
clip-path介绍 clip-path 直译过来就是裁剪路径,使用SVG或形状定义一个HTML元素的可见区域的方法.想象一下你在Photoshop中勾勒路径的场景.MDN上是这样介绍 clip-p ...
- SAP MM Storage Location Missing in MD04 Result?
SAP MM Storage Location Missing in MD04 Result? Today I received a ticket from business team, a user ...
- SQL Server2008 xp_cmdshell啟用
1. 查看系统数据库参数配置: select * from sys.configurations where name='xp_cmdshell' 修改系统数据库参数: 语法格式: sp_ ...
- 常见dos命令行
查找本地端口占用情况 是否8080端口被占用netstat -aon|findstr "8080" 在1.txt文档当中查找java字符串type 1.txt|findstr 'j ...
- C语言多线程的一个简单例子
多线程的一个简单例子: #include <stdio.h> #include <stdlib.h> #include <string.h> #include &l ...