`
pcajax
  • 浏览: 2162361 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

漫步ASP.NET MVC的处理管线

 
阅读更多

ASP.NET MVC从诞生到现在已经好几个年头了,这个框架提供一种全新的开发模式,更符合web开发本质。你可以很好的使用以及个性化和扩展这个框架,但这需要你对它有足够的了解。这篇文章主要从整体角度总结一下MVC的处理模型。

整体处理模型

先放一张图(图最直观而且很有说服力):

ASP.NETMVC5Pipeline

下面开始解释各个部分:

路由模块

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实现双语言的例子

    为了实现这一目标,ASP.NET 提供了 `CultureInfo` 类,它是处理区域性和文化信息的核心类。 1. **CultureInfo类**: - `CultureInfo` 类代表了一个特定的文化或地域,包括语言、数字格式、日期格式、排序规则等。 ...

    Asp.Net+Jquery实现的图片放大镜效果

    6. **Asp.Net后端支持**:在Asp.Net中,可以处理图像数据,例如提供一个API接口,用于获取不同尺寸或裁剪后的图像。当放大镜需要显示的图像部分超出了缩略图的范围时,可以通过这个接口获取相应的原始图像数据。 7....

    asp.net实现的在线照相功能,大家可以改改

    4. **ASP.NET后端处理**:在ASP.NET中,创建一个Web API或ASP.NET MVC控制器,接收来自前端的图像数据。由于Base64编码的图片数据较大,可以考虑将其解码并保存为二进制文件,再存储到服务器的指定位置或者数据库中...

    asp.net中英文转换。

    在ASP.NET开发中,实现中英文转换是一种常见的需求,尤其对于多语言网站或者有国际用户基础的应用来说。这里,我们主要探讨如何通过配置文件来轻松实现这一功能,而无需使用字典类或者其他复杂的翻译机制。 首先,...

    毕业设计asp.net农村村务管理系统-qkrp源码含文档工具包

    毕业设计asp.net农村村务管理系统-qkrp源码含文档工具包 asp.net,数据库sqlserver,开发工具用Microsoft Visual Studio 时光漫步青年旅社信息管理系统 公告管理 村委管理 财务管理 管理员 村民管理 社保管理 管理员...

    c# ASP.NET所有工具类。已经写好,欢迎下载

    在C# ASP.NET开发中,工具类是一组封装了常用功能的方法集合,它们可以极大地提高开发效率并降低代码的重复性。本资源提供了一个已经编写完成的工具类库,适用于各种常见的开发场景。下面,我们将深入探讨这些工具类...

    WEB基础实训漫步时尚广场项目zip__web漫步时尚广场,web漫步时尚广场代码

    8. **项目结构与组织**:理解MVC(Model-View-Controller)模式,学习如何合理组织项目文件结构。 通过这个实训项目,学员不仅能学习到Web开发的技术知识,还能提升问题解决能力,了解软件开发的整个流程,包括需求...

    漫步统计系统 2006 免费版 -ASP源码.zip

    "漫步统计系统 2006 免费版 -ASP源码.zip" 是一个基于ASP(Active Server Pages)技术的统计系统源代码包。ASP是微软开发的一种服务器端脚本环境,它允许开发者创建动态、交互式的网页。这个源码包主要用于网站的...

    web实例-漫步时尚广场源码

    这有助于理解DOM操作、事件处理和AJAX异步通信等概念。 4. **响应式设计**:为了适应不同设备的屏幕大小,现代网页通常采用响应式设计。在这个项目中,你可能发现CSS媒体查询(media queries)的使用,它们会根据...

    创建一个.NETMVC的项目步骤

    pureMVC最佳实践

    ### PureMVC最佳实践 #### 一、PureMVC简介 PureMVC是一个开源的、跨平台的架构框架,主要用于构建灵活、可扩展且易于维护的客户端应用程序。它基于经典的模型-视图-控制器(MVC)设计模式,并通过分离关注点的...

    WEB基础实训 漫步时尚广场-完整版

    在“漫步时尚广场”项目中,你将有机会实践如何使用这些标签构建一个完整的网站页面。 接着,我们会接触到CSS(Cascading Style Sheets),它是用于控制网页外观和布局的重要工具。通过CSS,你可以设置颜色、字体、...

    时光漫步整站v1.0

    主页管理 用户名:静水流深 密码:123456 论坛管理 用户名:静水流深 密码:123456 时光漫步整站v1.0与现在的时光整站(www.vvchina.net)完全一样。 具体功能介绍:滚动公告 ...

    漫步3.1.1全P源码

    8. **错误处理和调试**:查看源码中的异常处理和调试代码,了解其错误处理机制。 总的来说,"漫步3.1.1全P源码"提供了一个深入学习软件开发、逆向工程或改进现有功能的机会。通过系统地分析源码,我们可以提升自己...

    省市联动+日期选择,.net+jquery

    2. 使用ASP.NET创建一个Web服务(如WebService或API控制器),提供获取城市列表的接口。接口接收省份ID作为参数,返回该省份的所有城市。 3. 在HTML页面中,创建两个下拉列表,分别用于选择省份和城市。省份下拉...

    Random Walk 随机漫步

    随机漫步(Random Walk)是一种数学模型,常用于模拟和研究物体在无特定规律下的运动轨迹。在计算机科学和统计学中,它具有广泛的应用,包括金融市场分析、物理模拟、生物科学以及图形生成等领域。本实例来源于...

    spring mvc4.x + gradle+bootstrap 框架项目

    Spring MVC 提供了处理HTTP请求、数据绑定、异常处理、视图渲染等功能,帮助开发者构建结构清晰且易于维护的Web应用。 在4.x版本中,Spring MVC 引入了一些增强功能,如: 1. 支持JSR-303/JSR-349(Bean ...

    web基础实训青软实训 漫步时尚广场项目源代码以及图片

    web基础实训青软实训 漫步时尚广场项目源代码以及图片从第一章到第十二章全,包括图片代码,每一章节一个文件夹。从前端到后端界面,从显示产品到注册、登录、发布、审核产品的静态页面都有。 非常不错的实训资源

    WEB基础实训 漫步时尚广场项目.zip

    在本实践项目“漫步时尚广场”中,我们将深入学习Web开发的基础知识,这是一次针对初学者设计的实训,旨在帮助提升对Web技术的理解和应用能力。该项目包含源代码和相关图片,为即将前往城阳区进行实训的学习者提供了...

Global site tag (gtag.js) - Google Analytics