My Github

随笔分类 -  【003】ASP.NET MVC

Web开发新模式—ASP.NET MVC给力起飞!
摘要:传统.NET 4.x应用容器化体验(6)在Windows Container中,没有写日志的情况下,如何排查系统的异常信息?本文介绍了如何在Windows Container中通过事件日志排查ASP.NET应用程序的异常日志信息,虽然文章很短小,但希望对你有用。对于传统.NET 4.x应用的容器化迁移,我们也还在探索,相信探索和实践的深入,我会分享更多相关的内容。 阅读全文
posted @ 2021-11-28 14:03 EdisonZhou 阅读(144) 评论(0) 推荐(1) 编辑
摘要:Docker前面几篇都是基于阿里云ECS直接玩的,有童鞋问直接用Windows Server 2019可以玩不,本篇就为你介绍一下如何给Windows Server 2019配置Docker环境。本文介绍了如何在本地的Windows Server 2019服务器上安装和配置Docker环境,最后演示了一下ASP.NET应用的基本容器操作。 阅读全文
posted @ 2021-07-27 22:58 EdisonZhou 阅读(756) 评论(0) 推荐(6) 编辑
摘要:Docker上一篇我们试着将.NET 4.x的镜像推送到harbor私有镜像仓库,本篇我们来使用一下阿里云的镜像仓库服务并了解一下携程的实践。本文介绍了如何快速配置一个阿里云容器镜像仓库,并将.NET 4.x应用程序镜像推送到阿里云容器镜像仓库中,最后探究了一下.NET容器镜像的层信息。 阅读全文
posted @ 2021-07-22 22:01 EdisonZhou 阅读(2313) 评论(9) 推荐(9) 编辑
摘要:Docker上一篇我们自己通过编写Dockerfile来编译部署一个ASP.NET MVC应用程序到Windows Container,这一篇我们来试着将.NET 4.x的镜像推送到harbor私有镜像仓库。本文介绍了如何快速搭建一个harbor私有镜像仓库,并通过在Windows Server客户端推送ASP.NET应用程序的镜像到harbor,最后在Windows Server客户端拉取harbor的镜像并成功运行。 阅读全文
posted @ 2021-07-20 22:16 EdisonZhou 阅读(529) 评论(1) 推荐(1) 编辑
摘要:Docker上一篇我们基于Windwos Server 2019 with Container初步跑了一个ASP.NET WebForm应用程序。本篇我们来自己编译部署一个ASP.NET MVC应用程序到Windows Container。本文介绍了如何在Windows Container下通过Dockerfile实现.NET 4.x应用程序的编译打包构建过程,并以一个ASP.NET MVC的Sample示例演示了整个过程。 阅读全文
posted @ 2021-07-19 22:37 EdisonZhou 阅读(995) 评论(0) 推荐(5) 编辑
摘要:Docker我们都知道.NET Core应用可以跑在Docker上,那.NET Framework 4.x应用呢?借助阿里云ECS主机(Windows Server 2019 with Container版本),一切变得So Easy!本文介绍了Windows Container的基本概念、阿里云ECS与ACK对Windows Container的支持,然后介绍了如何在阿里云ECS(Windows Server 2019)上进行.NET 4.x应用的容器化部署运行。 阅读全文
posted @ 2021-07-18 22:11 EdisonZhou 阅读(3384) 评论(12) 推荐(13) 编辑
摘要:多线程下的调用上下文 : CallContext最近在分析现在团队的项目代码(基于.NET Framework 4.5),经常发现一个CallContext的调用,记得多年前的时候用到了它,但是印象已经不深刻了,于是现在来复习一下。 1 CallContext是个啥? 如果说,一个对象保证全局唯一,大家肯定会想到一个经典的设计模式:单例模式。但是 阅读全文
posted @ 2021-06-22 23:10 EdisonZhou 阅读(1805) 评论(3) 推荐(6) 编辑
摘要:本文首先回顾了ASP.NET MVC经历的管道事件概览,然后针对其中核心的“路由系统”和“MvcHandler”进行了实现,并对其进行了一定封装,还实现了ContentResult、JsonResult和ViewResult,最终成为了一个可以使用的轻量级ASP.NET MVC框架。借助此框架,可以在最小化的引用环境(System和System.Web)中进行类似ASP.NET MVC的开发方式。最后,给出了这个小MVC框架的源码下载地址,供各位园友学习和指正。 阅读全文
posted @ 2016-03-09 02:23 EdisonZhou 阅读(14806) 评论(20) 推荐(100) 编辑
摘要:本文首先回顾了一下MVC的关键概念,并从一个“纯净”的ASP.NET Web空项目开始一步一步构建一个类似于MVC的应用程序,通过单一处理入口的伪静态方式与模拟路由表的方式进行了简单地实现,并进行了测试。此次实验,核心就在于获取路由数据,指定处理程序,也就是理解并模拟路由机制。路由模块就是一个很简单的HttpModule,而ASP.NET MVC帮我们实现了UrlRoutingModule从而使我们轻松实现了路由机制。 阅读全文
posted @ 2016-02-24 01:53 EdisonZhou 阅读(11577) 评论(9) 推荐(24) 编辑
摘要:上一篇我们了解了在WebForm模式下一个Page页面的生命周期,它经历了初始化Init、加载Load以及呈现Render三个重要阶段,其中构造了页面控件树,并对页面控件树进行了大量的递归操作,最后将与模板结合生成的HTML返回给了浏览器。那么,在ASP.NET MVC模式下,一个页面的生命周期又经历了哪些步凑呢?别急,本篇漫漫道来!2009年,Microsoft推出了ASP.NET MVC,也将ASP.NET MVC项目作为开源项目推送到了开源社区中,至今时间也过去快6年了,ASP.NET MVC已经到了5.0的版本阶段了。我们看到ASP.NET MVC从一个不完整的小孩长成一个日渐成熟的巨人,我们可以从开源社区找到ASP.NET MVC的源码,相比之前我们需要Reflector进行反编 阅读全文
posted @ 2015-01-19 22:04 EdisonZhou 阅读(14929) 评论(28) 推荐(78) 编辑
摘要:在前面对于请求处理管道的介绍中,我们已经了解了一个ASP.NET WebForm页面请求事件的整体流程。那么,在其中一个最重要的部分就是ASP.NET Page页面,但是我们并没有对其进行详细讨论。因此,我们在此深入地了解一下ASP.NET页面事件。每一个ASP.NET Page页都有2个部分:一个部分是在浏览器中进行显示的部分,它包含了HTML标签、viewstate形式的隐藏域 以及 在HTML input中的数据。当这个页面被提交到服务器时,这些HTML标签会被创建到ASP.NET控件,并且viewstate还会和表单数据绑定在一起。另一个部分是在xxx.cs文件中的进行业务逻辑操作的部分,一旦你在后置代码中得到所有的服务器控件,你可以执行和写入你自己的逻辑并呈现给客户浏览器。 阅读全文
posted @ 2015-01-14 14:55 EdisonZhou 阅读(7709) 评论(9) 推荐(36) 编辑
摘要:上一篇我们了解了一个ASP.Net页面请求的核心处理入口,它经历了三个重要的入口,分别是:ISAPIRuntime.ProcessRequest()、HttpRuntime.ProcessRequest()以及HttpApplication.Init()。其中,在HttpApplication的Init()方法中触发了请求处理管道事件的执行,本篇我们就来看看所谓的请求处理管道。HttpApplication对象是ASP.NET中处理请求的重要对象,但是,这种类型的对象实例不是由程序员来创建的,而是由ASP.NET帮助我们创建的。为了便于扩展处理工作,HttpApplication采用处理管道的方法进行处理,将处理的过程分为多个步骤,每个步骤通过事件的形式暴露给程序员,这些事件按照固定的处理 阅读全文
posted @ 2015-01-06 00:46 EdisonZhou 阅读(11127) 评论(37) 推荐(61) 编辑
摘要:上一篇我们了解了一个请求从客户端发出到服务端接收并转到ASP.Net处理入口的过程,这篇我们开始探索ASP.Net的核心处理部分,借助强大的反编译工具,我们会看到几个熟悉又陌生的名词(类):HttpRuntime、HttpWorkerRequest、HttpContext、HttpApplication等。ISAPIRuntime是进入NET托管环境的入口,它在方法中通过一个ecb句柄指向了当前请求报文体的内存地址,将HTTP请求报文简单封装为一个HttpWorkerRequest对象,然后就是各种我们经常听到的PR(ProcessRequest)方法了。 阅读全文
posted @ 2014-12-31 20:21 EdisonZhou 阅读(7491) 评论(16) 推荐(33) 编辑
摘要:ASP.Net是一项动态网页开发技术,在历史发展的长河中WebForm曾一时成为了ASP.Net的代名词,而ASP.Net MVC的出现让这项技术更加唤发朝气。但是,不管是ASP.Net WebForm还是ASP.Net MVC在请求处理机制上大部分都是相同的,只是在请求处理管道上的处理事件做了不同的操作,因此,本文标题不区分ASP.Net WebForm和ASP.Net MVC,但在后续的介绍中会区分开来介绍。此外,本文以IIS经典模式为主,不讨论集成模式(IIS7后加入了集成模式,不用加载外部的aspnet_isapi.dll组件)。 阅读全文
posted @ 2014-12-30 20:57 EdisonZhou 阅读(8373) 评论(20) 推荐(76) 编辑
摘要:在项目上右击创建新的区域,可以让我们的项目不至于太复杂而导致管理混乱。有了区域后,每个模块的页面都放入相应的区域内进行管理很方便。例如:上图中有两个模块,一个是Admin模块,另一个是Product模块,所有关于这两个模块的控制器、Model以及视图都放入各自的模块内。可以从上图中看出,区域的功能类似一个小的MVC项目,麻雀虽小五脏俱全,有自己的控制器、模型、视图还有路由设置。区域实际上是应用程序内部的一个 MVC 结构,一个应用程序可能包含若干个 MVC 结构(区域)。例如:一个大型电子商务应用程序可能分为若干个区域,这些区域表示店面、产品检查、用户帐户管理和采购系统。每个区域表示整个应用程序的一个独立功能。 阅读全文
posted @ 2014-08-29 16:07 EdisonZhou 阅读(8142) 评论(8) 推荐(20) 编辑
摘要:位于 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据模型中的各个字段的验证。这些特性用于定义常见的验证模式,例如范围检查和必填字段。而 DataAnnotations 特性使 MVC 能够提供客户端和服务器验证检查,使你无需进行额外的编码来控制数据的有效。通过为模型类增加数据描述的 DataAnnotations ,我们可以容易地为应用程序增加验证的功能。DataAnnotations 允许我们描述希望应用在模型属性上的验证规则,ASP.NET MVC 将会使用这些 DataAnnotations ,然后将适当的验证信息返回给用户。 阅读全文
posted @ 2014-08-25 02:25 EdisonZhou 阅读(7877) 评论(6) 推荐(26) 编辑
摘要:在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor。在这之前,我们一直在使用WebForm时代沿留下来的ASPX引擎或者第三方的NVelocity模板引擎。Razor在减少代码冗余、增强代码可读性和Visual Studio智能感知方面,都有着突出的优势。Razor一经推出就深受广大ASP.Net开发者的喜爱。 阅读全文
posted @ 2014-08-21 23:12 EdisonZhou 阅读(10925) 评论(10) 推荐(20) 编辑
摘要: 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归。所以抛弃之前的那种事件响应的模型,抛弃服务器端控件也理所当然。但是,如果手写Html标签效率又比较低,可重用度比较低。这时,我们该怎样来提高效率呢?首先,经过上篇我们知道可以通过ViewData传递数据,于是我们可以写出以下的Html代码:虽然以上代码可以解决问题,但是效率还是比较低,特别是在列表集合项较多的时候,工作量会比较大。那么,还有木有一种更好的方式呢?别急,微软已经为我们想好了策略。微软为开发人员快速开发前台页面提供了丰富的HtmlHelper的辅助类,辅助我们快速开发前台页面,也提供了可扩展的接口,前台页面的标签可以可以做到高度可重用。 阅读全文
posted @ 2014-08-16 15:29 EdisonZhou 阅读(18740) 评论(10) 推荐(20) 编辑
摘要:在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/blog/index.aspx的URL,那么我们的WebForm程序会到网站根目录下去寻找blog目录下的index.aspx文件,然后由index.aspx页面的CodeBehind文件(.CS文件)进行逻辑处理,其中或许也包括到数据库去取出数据(其中的经过怎样的BLL到DAL这里就不谈了),然后再由index.aspx页面来呈现给用户。综上所述,在WebForm模式下:一个URL请求的是在服务器与该URL对应路径上的物理文件(ASPX文件或其他),然后由该文件来处理这个请求并返回结果给客户端。 阅读全文
posted @ 2014-08-14 14:36 EdisonZhou 阅读(37264) 评论(12) 推荐(51) 编辑