ASP.NET MVC从诞生到现在已经好几个年头了,这个框架提供一种全新的开发模式,更符合web开发本质。你可以很好的使用以及个性化和扩展这个框架,但这需要你对它有足够的了解。这篇文章主要从整体角度总结一下MVC的处理模型。
整体处理模型
先放一张图(图最直观而且很有说服力):
下面开始解释各个部分:
路由模块
1.在ASP.NET MVC处理管线中的第一站就是路由模块。当请求到达路由模块后,MVC框架就会根据Route Table中配置的路由模板来匹配当前请求以获得对应的controller和action信息。具体的匹配过程就是有UrlRoutingModule(System.Web.Routing.UrlRoutingModule)来实现的。
2.当ASP.NET MVC应用程序第一次启动的时候,路由系统就会把我们注册的路由规则(拦截哪些请求)加到Route Table中,一个应用程序包含一个Route Table,在Global.asax中的Application_Start事件中被创建:
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 }
);
}
}
protected void Application_Start()
{
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
3.当UrlRoutingModule在Route Table中找到一条匹配的路由规则时,就会为这条路由规则寻找对应的IRouteHandler(System.Web.Mvc.IRouteHandler)实例(默认是System.Web.MvcRouteHandler),根据这个RouteHandler最后获取一个IHttpHandler的实例(默认是System.Web.MvcHandler)
public interface IRouteHandler
{
IHttpHandler GetHttpHandler(RequestContext requestContext);
}
Controller初始化
1.在MvcHandler中的ProcessRequest方法中就是ASP.NET MVC的生命周期,这个方法使用IControllerFactory的实例(默认是System.Web.Mvc.DefaultControllerFactory)来创建相应的controller:
protected internal virtual void ProcessRequest(HttpContextBase httpContext)
{
SecurityUtil.ProcessInApplicationTrust(delegate {
IController controller;
IControllerFactory factory;
this.ProcessRequestInit(httpContext, out controller, out factory);
try
{
controller.Execute(this.RequestContext);
}
finally
{
factory.ReleaseController(controller);
}
});
}
Action的执行
1.当controller创建之后,紧接着就会执行自己的InvokeAction()方法:
public virtual bool InvokeAction(ControllerContext controllerContext, string actionName)
2.当选择完合适的action后,接着就是model binders(默认是System.Web.Mvc.DefaultModelBinder),它会从http请求的参数中提取数据并实现类型转换,数据校验(例如是否必填,数据格式等)以及是否自动装配到action方法的参数中System.Web.Mvc.DefaultModelBinder
3.Authentication Filter是mvc5中新增的一个Filter,它会先于authorization filter执行,目的是对访问用户的认证。在MVC5之前,认证和授权都是通过authorization filter来实现的,但现在这2个操作就分开来了,各自管各自喽。
4.Action filters有2个方法OnActionExecuting和OnActionExecuted分别在action执行前后执行。我们也可以通过实现IActionFilter接口来实现你个性化的过滤机制
5.接下来就是执行我们平时在action方法中写的代码了(根据请求相应结果)
ActionResult的执行
1.在ActionResult执行前后,仍然会有一个filter(ResultFilter),同样的,通过实现IResultFilter接口你可以定制自己的过滤逻辑。
2.ActionResult就是把BAL DAL处理的用户请求结果返回。因此ViewResult, PartialViewResult, RedirectToRouteResult, RedirectResult, ContentResult, JsonResult, FileResult and EmptyResult就是具体的返回类型
3.上面的返回类型可以大致分为2类:ViewResult和非ViewResult。对于需要生成html页面给客户端的划到ViewResult,而其他的例如返回文本,json数据等则划分到非ViewResult,对于非ViewResult直接返回就可以了。
View的初始化和渲染呈现
1.对于ViewResult最终是由合适的View Engine通过调用IView的Render()方法来渲染View的:
public interface IView
{
void Render(ViewContext viewContext, TextWriter writer);
}
2.整个处理过程是由IViewEngine(System.Web.Mvc.IViewEngine)来实现的。ASP.NET MVC 默认提供webform(.aspx)和Razor(.cshtml)模板引擎,你可以通过实现IViewEngine接口来实现你自己的ViewEngine,然后在Application_Start方法中做如下注册:
protected void Application_Start()
{
//移除所有的View引擎包括Webform和Razor
ViewEngines.Engines.Clear();
//注册你自己的View引擎
ViewEngines.Engines.Add(new CustomViewEngine());
}
3.最后,Html Helpers将帮我们生成input标签,基于AJAX的form等等。Html Helpers是HtmlHelper类的扩展方法,因此想要进一步扩展也是非常容易的。
总结
整个流程做了一个简单的介绍,算是对自己学习MVC的一次总结和回顾,也希望帮助你在以后更好的使用和扩展MVC。
参考地址:http://www.dotnet-tricks.com/Tutorial/mvc/LYHK270114-Detailed-ASP.NET-MVC-Pipeline.html
分享到:
相关推荐
为了实现这一目标,ASP.NET 提供了 `CultureInfo` 类,它是处理区域性和文化信息的核心类。 1. **CultureInfo类**: - `CultureInfo` 类代表了一个特定的文化或地域,包括语言、数字格式、日期格式、排序规则等。 ...
6. **Asp.Net后端支持**:在Asp.Net中,可以处理图像数据,例如提供一个API接口,用于获取不同尺寸或裁剪后的图像。当放大镜需要显示的图像部分超出了缩略图的范围时,可以通过这个接口获取相应的原始图像数据。 7....
4. **ASP.NET后端处理**:在ASP.NET中,创建一个Web API或ASP.NET MVC控制器,接收来自前端的图像数据。由于Base64编码的图片数据较大,可以考虑将其解码并保存为二进制文件,再存储到服务器的指定位置或者数据库中...
在ASP.NET开发中,实现中英文转换是一种常见的需求,尤其对于多语言网站或者有国际用户基础的应用来说。这里,我们主要探讨如何通过配置文件来轻松实现这一功能,而无需使用字典类或者其他复杂的翻译机制。 首先,...
毕业设计asp.net农村村务管理系统-qkrp源码含文档工具包 asp.net,数据库sqlserver,开发工具用Microsoft Visual Studio 时光漫步青年旅社信息管理系统 公告管理 村委管理 财务管理 管理员 村民管理 社保管理 管理员...
在C# ASP.NET开发中,工具类是一组封装了常用功能的方法集合,它们可以极大地提高开发效率并降低代码的重复性。本资源提供了一个已经编写完成的工具类库,适用于各种常见的开发场景。下面,我们将深入探讨这些工具类...
8. **项目结构与组织**:理解MVC(Model-View-Controller)模式,学习如何合理组织项目文件结构。 通过这个实训项目,学员不仅能学习到Web开发的技术知识,还能提升问题解决能力,了解软件开发的整个流程,包括需求...
"漫步统计系统 2006 免费版 -ASP源码.zip" 是一个基于ASP(Active Server Pages)技术的统计系统源代码包。ASP是微软开发的一种服务器端脚本环境,它允许开发者创建动态、交互式的网页。这个源码包主要用于网站的...
这有助于理解DOM操作、事件处理和AJAX异步通信等概念。 4. **响应式设计**:为了适应不同设备的屏幕大小,现代网页通常采用响应式设计。在这个项目中,你可能发现CSS媒体查询(media queries)的使用,它们会根据...
### PureMVC最佳实践 #### 一、PureMVC简介 PureMVC是一个开源的、跨平台的架构框架,主要用于构建灵活、可扩展且易于维护的客户端应用程序。它基于经典的模型-视图-控制器(MVC)设计模式,并通过分离关注点的...
在“漫步时尚广场”项目中,你将有机会实践如何使用这些标签构建一个完整的网站页面。 接着,我们会接触到CSS(Cascading Style Sheets),它是用于控制网页外观和布局的重要工具。通过CSS,你可以设置颜色、字体、...
主页管理 用户名:静水流深 密码:123456 论坛管理 用户名:静水流深 密码:123456 时光漫步整站v1.0与现在的时光整站(www.vvchina.net)完全一样。 具体功能介绍:滚动公告 ...
8. **错误处理和调试**:查看源码中的异常处理和调试代码,了解其错误处理机制。 总的来说,"漫步3.1.1全P源码"提供了一个深入学习软件开发、逆向工程或改进现有功能的机会。通过系统地分析源码,我们可以提升自己...
2. 使用ASP.NET创建一个Web服务(如WebService或API控制器),提供获取城市列表的接口。接口接收省份ID作为参数,返回该省份的所有城市。 3. 在HTML页面中,创建两个下拉列表,分别用于选择省份和城市。省份下拉...
随机漫步(Random Walk)是一种数学模型,常用于模拟和研究物体在无特定规律下的运动轨迹。在计算机科学和统计学中,它具有广泛的应用,包括金融市场分析、物理模拟、生物科学以及图形生成等领域。本实例来源于...
Spring MVC 提供了处理HTTP请求、数据绑定、异常处理、视图渲染等功能,帮助开发者构建结构清晰且易于维护的Web应用。 在4.x版本中,Spring MVC 引入了一些增强功能,如: 1. 支持JSR-303/JSR-349(Bean ...
web基础实训青软实训 漫步时尚广场项目源代码以及图片从第一章到第十二章全,包括图片代码,每一章节一个文件夹。从前端到后端界面,从显示产品到注册、登录、发布、审核产品的静态页面都有。 非常不错的实训资源
在本实践项目“漫步时尚广场”中,我们将深入学习Web开发的基础知识,这是一次针对初学者设计的实训,旨在帮助提升对Web技术的理解和应用能力。该项目包含源代码和相关图片,为即将前往城阳区进行实训的学习者提供了...