学习ASP.NET MVC5框架揭秘笔记-ASP.NET MVC是如何运行的(一)

ASP.NET MVC是如何运行的

ASP.NET由于采用了管道式设计,所以具有很好的扩展性,整个ASP.NET MVC应用框架就是通过扩展ASP.NET实现的。通过上面对ASP.NET管道设计的介绍我们知道,ASP.NET 的扩展点主要体现在HttpModuleHttpHandler这两个核心组件之上,整个ASP.NET MVC框架就是通过自定义的HttpModuleHttpHandler建立起来的。

接下来我们通过自定义组件来模拟ASP.NET MVC的运行原理。

1.4.1建立在迷你版ASP.NET MVC上的Web应用

在介绍我们自己的ASP.NET MVC的实现原理之前,我们先来看看建立在我们自己的框架之上的Web应用如何来搭建。我们用VS建立一个空ASP.NET Web应用。

我们首先定义了如下一个SimpleModule类型,它表示最终需要绑定到View上的数据。为了验证对目标ControllerAction的解析机制,SimpleModule定义的两个属性分别表示当前请求的目标ControllerAction。为了更好的演示ASP.NET MVC的参数绑定机制(Model绑定),我们为SimpleModule定义了额外3个属性FooBarBaz,并让他们具有不同的数据类型。

public class SimpleModel
    {
        public string Controller { get; set; }
        public string Action { get; set; }
        public string Foo { get; set; }
        public int Bar { get; set; }
        public double Baz { get; set; }
    }

接下来我们定义ControllerAction,我们定义了如下一个继承自抽象类ControllerBaseHomeController。定义在HomeController中的Action方法Index具有一个SimpleModel类型的输入参数,并以ActionResult昨晚返回类型。

public class HomeController : ControllerBase
    {
        public ActionResult Index(SimpleModel model)
        {
            Action<TextWriter> callback = writer =>
            {
                writer.Write(string.Format("Controller: {0}<br/>Action: {1}<br/><br/>", model.Controller, model.Action));
                writer.Write(string.Format("Foo: {0}<br/>Bar: {1}<br/>Baz: {2}", model.Foo, model.Bar, model.Baz));
            };
            return new RawContentResult(callback);
        }
    }

方法Index返回一个RawContentResult对象。RawContentResult对象是对一个Action<TextWriter>委托的封装,他利用后者写入需要呈现的内容。在这里我们将作为参数的SimpleModel对象的两组属性(Controller/ActionFoo/Bar/Baz)的值显示出来。

ASP.NET MVC根据请求的URL来解析目标Controller的类型和Action方法名称。具体来说,我们会注册一些包含ControllerAction名称作为占位符的路由模板。如果请求地址符合相应地址模板的模式,目标ControllerAction的名称就可以正确地解析出来。我们在Global.asax中注册了如下一个模板“{Controller}/{Action}”的Route对象。除此之外,我们还注册了一个用于创建Controller对象的工厂DefaultControllerFactory

 public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            RouteTable.Routes.Add("default", new Route { Url = "{controller}/{action}" });
            ControllerBuilder.Current.SetControllerFactory(new DefaultControllerFactory());
        }
    }

路由实现了请求URL与目标Controller/Action之间的映射。ASP.NET MVC的路由建立在ASP.NET自身的路由系统之上,后者则通过自定义的HttpModule来实现。在我们的ASP.NET MVC框架中,我们将其命名为UrlRoutingModule,它与ASP.NET路由系统中对应的HttpModule类型同名,我们通过配置对自定义的HttpModule进行配置。

<system.webServer>
     <modules>
          <add name="UrlRoutingModule" type="WebApp.UrlRoutingModule, WebApp"/>      
    </modules>    
  </system.webServer>

这样编程和配置工作就完成了。

上面演示了如何在我们自己创建的“迷你版”ASP.NET MVC框架上搭建一个Web应用,从中可以看到它和创建一个真正的ASP.NET MVC应用别无二致。接下来我们就逐步来分析这个自定义的ASP.NET MVC框架是如何搭建起来的,他也代表了真正的ASP.NET MVC框架的基本工作原理。

总的来说,ASP.NET MVC按照这样的流程来处理响应请求:ASP.NET MVC利用路由系统对请求URL进行解析而得到目标ControllerAction的名称,以及其他相应的路由数据。它根据Controller的名称解析出目标Controller的真正类型,并将其激活(默认情况下就是根据类型以反射的机制创建Controller对象)。接下来,ASP.NET MVC利用Action名称解析出定义在目标Controller类型中对应的方法,然后执行激活Controller对象的这个方法。Action方法可以在执行过程中直接对当前请求予以响应,也可以返回一个ActionResult对象来响应请求。对于后者,ASP.NET MVC在完成目标Action方法执行之后,会执行返回的ActionResult对象来对当前请求作最终的响应。

   下一章我们来讲解这个自定义的ASP.NET MVC中的路由系统的建立。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ASP.NET MVC 5是一种基于MVC设计模式的Web应用程序框架,它能够帮助开发人员快速地构建高性能、可扩展、易于维护的Web应用程序。ASP.NET MVC 5的源代码是开放的,可以供开发人员学习和使用。 ASP.NET MVC 5的源代码包括了许多组件,如控制器、视图、路由、模型绑定、过滤器等,每个组件为开发人员提供了丰富的功能和灵活的扩展性。例如,控制器是ASP.NET MVC 5应用程序的核心组件之一,它包含了Action(处理客户端请求的方法)和ActionResult(请求的结果)等。视图是另一个重要的组件,它负责呈现数据并与用户交互。路由是整个应用的核心,负责将请求路由到对应的控制器和Action。 ASP.NET MVC 5的源代码还包含了许多其他的实用工具和库,如ASP.NET Identity(用户认证和授权)、Microsoft.AspNet.Web.Optimization(前端资源优化)、Web API(RESTful服务)等,这些工具和库能够帮助开发人员构建更加丰富和复杂的Web应用程序。 总之,ASP.NET MVC 5的源码是开放的,它提供了丰富的组件、实用的工具和库,可以帮助开发人员快速构建高性能、可扩展和易于维护的Web应用程序。开发人员可以通过学习源代码来了解框架的内部实现和功能特性,并逐步提升自己的开发技能。 ### 回答2: ASP.NET MVC 5是一种使用MVC模式(Mode-View-Controller)的Web应用程序框架。它是基于.NET Framework的,可以用于创建高性能、可扩展、安全的Web应用程序。 以下是ASP.NET MVC 5框架的主要源码揭秘: 1. Routing:路由是ASP.NET MVC应用程序中的一个重要概念。它用于将URL映射到特定的控制器和操作方法。MVC 5框架中的路由引擎根据请求的URL和路由模板来确定请求应该由哪个控制器和操作方法处理。 2. Controller:控制器是MVC模式中的一个组成部分,它负责处理用户请求并生成响应。在MVC 5框架中,控制器有许多基础类和接口,如Controller类、IController接口等。 3. View:视图是控制器生成响应的一部分,它将模型数据呈现为HTML页面。在MVC 5框架中,使用各种视图引擎来呈现视图,如Razor视图引擎、ASPX视图引擎等。 4. Model:模型是MVC模式中的最后一个组成部分,它在控制器和视图之间传递数据。在MVC 5框架中,使用各种模型绑定器来将请求数据绑定到模型。 5. Bundling and Minification:Bundling和Minification是ASP.NET MVC中常用的技术,用于减少页面加载时间和资源使用。在MVC 5框架中,通过使用System.Web.Optimization命名空间中的类来添加和管理JS、CSS和其他资源的捆绑和缩小。 总之,ASP.NET MVC 5是一种功能强大的Web应用程序框架,它实现了MVC模式并提供了许多特性和工具来帮助开发人员构建高性能、可扩展、安全的Web应用程序。通过深入了解和分析MVC 5框架的源代码,开发人员可以更好地理解其内部工作原理,从而更有效地使用和扩展它。 ### 回答3: ASP.NET MVC 5是一种用于构建Web应用的框架,它使用模型-视图-控制器(MVC)的设计模式。本文将介绍ASP.NET MVC 5的源代码。 ASP.NET MVC 5的源代码主要分为几个部分:框架核心、路由、控制器、视图和模型。 框架核心是ASP.NET MVC 5的核心部分,提供了MVC框架的基本功能。其中包括建立请求管道、控制器工厂和视图引擎等关键组件。框架核心的代码是相当庞大的,包含了许多类、接口和扩展方法。在了解整个框架的实现细节时,框架核心是一个重要的起点。 路由是控制请求流程的重要组成部分。ASP.NET MVC 5使用的是基于URL的路由,它将请求URL映射到相应的控制器和操作上。路由的源代码中,关键部分是路由表的维护和查询机制。在了解路由的实现细节时,了解路由表的数据结构和查询算法是必不可少的。 控制器是MVC框架中的核心组件,它负责处理请求并返回响应。控制器的实现代码通常非常简单,主要是一些Action方法的定义和调用。控制器的源代码中,需要关注的是Action的参数绑定、Model验证和ActionResult的实现细节等。 视图是MVC框架中的UI组件,它通过生成HTML代码来渲染页面。视图的源代码中,关键部分是视图引擎的实现,它根据视图的文件名和模板来生成HTML代码。在了解视图的实现细节时,视图引擎是一个重要的组成部分。 模型是应用程序中的数据模型,通常与数据库中的数据结构相关。模型的源代码中,重点是数据访问层和实体类型的定义。在了解数据模型的实现细节时,了解数据访问层的实现和实体类型的定义是必要的。 总之,ASP.NET MVC 5的源代码非常庞大,也非常复杂。要彻底掌握它,需要对框架的核心、路由、控制器、视图和模型等组成部分进行深入研究。同时,我们也需要了解C#编程语言和.NET平台的底层机制。只有这样,才能真正揭秘ASP.NET MVC 5的源代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值