代码改变世界

随笔分类 - [04]ASP.NET MVC

解读ASP.NET 5 & MVC6系列(17):MVC中的其他新特性

2015-06-03 09:22 by 汤姆大叔, 18277 阅读, 收藏, 编辑
摘要:#(GlobalImport全局导入功能)默认新建立的MVC程序中,在Views目录下,新增加了一个`_GlobalImport.cshtml`文件和`_ViewStart.cshtml`平级,该文件的功能类似于之前Views目录下的web.config文件,之前我们在该文件中经常设置全局导入的命名... 阅读全文

解读ASP.NET 5 & MVC6系列(16):自定义View视图文件查找逻辑

2015-06-02 09:07 by 汤姆大叔, 11392 阅读, 收藏, 编辑
摘要:之前MVC5和之前的版本中,我们要想对View文件的路径进行控制的话,则必须要对`IViewEngine`接口的`FindPartialView`或`FindView`方法进行重写,所有的视图引擎都继承于该`IViewEngine`接口,比如默认的`RazorViewEngine`。但新版本MVC6... 阅读全文

解读ASP.NET 5 & MVC6系列(15):MvcOptions配置

2015-06-01 08:58 by 汤姆大叔, 7379 阅读, 收藏, 编辑
摘要:#程序模型处理 IApplicationModelConvention在`MvcOptions`的实例对象上,有一个`ApplicationModelConventions`属性(类型是:`List`),该属性`IApplicationModelConvention`类型的接口集合,用于处理应用模型... 阅读全文

解读ASP.NET 5 & MVC6系列(14):View Component

2015-05-29 09:18 by 汤姆大叔, 10907 阅读, 收藏, 编辑
摘要:在之前的MVC中,我们经常需要类似一种小部件的功能,通常我们都是使用Partial View来实现,因为MVC中没有类似Web Forms中的WebControl的功能。但在MVC6中,这一功能得到了极大的改善。新版MVC6中,提供了一种叫做View Component的功能。你可以将View Co... 阅读全文

解读ASP.NET 5 & MVC6系列(13):TagHelper

2015-05-28 09:22 by 汤姆大叔, 13625 阅读, 收藏, 编辑
摘要:在新版的MVC6中,微软提供了强大的TagHelper功能,以便让我们摆脱如下的臃肿代码:```csharp@Html.LabelFor(model => model.FullName)@Html.EditFor(model => model.FullName)@Html.ValidationMes... 阅读全文

解读ASP.NET 5 & MVC6系列(12):基于Lamda表达式的强类型Routing实现

2015-05-27 09:05 by 汤姆大叔, 7716 阅读, 收藏, 编辑
摘要:前面的深入理解Routing章节,我们讲到了在MVC中,除了使用默认的ASP.NET 5的路由注册方式,还可以使用基于Attribute的特性(Route和HttpXXX系列方法)来定义。本章,我们将讲述一种基于Lambda表达式的强类型类型。这种方式的基本使用示例如下:```csharpservi... 阅读全文

解读ASP.NET 5 & MVC6系列(11):Routing路由

2015-05-26 09:07 by 汤姆大叔, 18445 阅读, 收藏, 编辑
摘要:#新版Routing功能介绍在ASP.NET 5和MVC6中,Routing功能被全部重写了,虽然用法有些类似,但和之前的Routing原理完全不太一样了,该Routing框架不仅可以支持MVC和Web API,还支持一般的ASP.NET5程序。新版的改变有如下几个部分。首先,Routing系统是基... 阅读全文

解读ASP.NET 5 & MVC6系列(10):Controller与Action

2015-05-25 09:11 by 汤姆大叔, 14685 阅读, 收藏, 编辑
摘要:我们知道在MVC5和之前的版本,两个框架的生命周期是不一样的,在新版MVC6中,MVC Controller/Web API Controller已经合二为一了,本章我们主要讲解Controller和Action的定义与使用,以及在MVC框架中,如何根据路由查询相应的Controller和Actio... 阅读全文

解读ASP.NET 5 & MVC6系列(9):日志框架

2015-05-22 09:00 by 汤姆大叔, 17854 阅读, 收藏, 编辑
摘要:#框架介绍在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net、NLog、CommonLogging使用起来多多少少都有些费劲,和java的SLF4J根本无法相比。但在新版的ASP.NET5中,可谓是牛气冲天,微软提供的Microsoft.Framework.Lo... 阅读全文

解读ASP.NET 5 & MVC6系列(8):Session与Caching

2015-05-21 09:08 by 汤姆大叔, 23492 阅读, 收藏, 编辑
摘要:在之前的版本中,Session存在于System.Web中,新版ASP.NET 5中由于不在依赖于System.Web.dll库了,所以相应的,Session也就成了ASP.NET 5中一个可配置的模块(middleware)了。#配置启用SessionASP.NET 5中的Session模块存在于... 阅读全文

解读ASP.NET 5 & MVC6系列(7):依赖注入

2015-05-20 09:10 by 汤姆大叔, 41395 阅读, 收藏, 编辑
摘要:在前面的章节(Middleware章节)中,我们提到了依赖注入功能(Dependency Injection),ASP.NET 5正式将依赖注入进行了全功能的实现,以便开发人员能够开发更具弹性的组件程序,MVC6也利用了依赖注入的功能重新对Controller和View的服务注入功能进行了重新设计;... 阅读全文

解读ASP.NET 5 & MVC6系列(6):Middleware详解

2015-05-19 09:16 by 汤姆大叔, 15734 阅读, 收藏, 编辑
摘要:在第1章项目结构分析中,我们提到`Startup.cs`作为整个程序的入口点,等同于传统的`Global.asax`文件,即:用于初始化系统级的信息(例如,MVC中的路由配置)。本章我们就来一一分析,在这里如何初始化这些系统级的信息。#新旧版本之间的Pipeline区别ASP.NET 5和之前版本的... 阅读全文

解读ASP.NET 5 & MVC6系列(5):Configuration配置信息管理

2015-05-18 07:44 by 汤姆大叔, 18084 阅读, 收藏, 编辑
摘要:在前面的章节中,我们知道新版的MVC程序抛弃了原来的web.config文件机制,取而代替的是config.json,今天我们就来深入研究一下配置文件的相关内容。#基本用法新版的配置信息机制在Microsoft.Framework.ConfigurationModel命名空间下进行了重写,重写以后不... 阅读全文

解读ASP.NET 5 & MVC6系列(4):核心技术与环境配置

2015-05-17 19:21 by 汤姆大叔, 20269 阅读, 收藏, 编辑
摘要:asp.net 5是下一代的asp.net,该版本进行了全部重写以适用于跨平台,新新版本中,微软引入了如下工具与命令:DNVM、DNX、DNU。**DNVM**(.NET Version Manager):由于要实现跨平台的目录,微软提供了DNVM功能,DNVM是ASP.NET最底层的内容,他是一组... 阅读全文

解读ASP.NET 5 & MVC6系列(3):项目发布与部署

2015-05-15 09:14 by 汤姆大叔, 25079 阅读, 收藏, 编辑
摘要:本章我们将讲解ASP.NET5项目发布部署相关的内容,示例项目以我们前一章创建的BookStore项目为例。#发布前的设置由于新版ASP.NET5支持多版本DNX运行环境的发布和部署,所以在部署之前,我们需要设定部署的目标DNX(即之前的KRE)。步骤:右键BookStore项目->属性->Appl... 阅读全文

解读ASP.NET 5 & MVC6系列(2):初识项目

2015-05-14 09:08 by 汤姆大叔, 35812 阅读, 收藏, 编辑
摘要:#初识项目打开VS2015,创建Web项目,选择ASP.NET Web Application,在弹出的窗口里选择ASP.NET 5 Website模板创建项目,图示如下:![](http://images.cnitblog.com/blog2015/349491/201505/1409071357... 阅读全文

解读ASP.NET 5 & MVC6系列(1):ASP.NET 5简介

2015-05-13 09:14 by 汤姆大叔, 51419 阅读, 收藏, 编辑
摘要:#ASP.NET 5简介ASP.NET 5是一个跨时代的改写,所有的功能和模块都进行了独立拆分,做到了彻底解耦。为了这些改写,微软也是蛮 拼的,几乎把.NET Framwrok全部改写了一遍,形成了一个.NET Core的东西。 在.NET Core里一切都是可配置的,包括Session、MVC等功... 阅读全文

解读ASP.NET 5 & MVC6系列

2015-05-13 07:37 by 汤姆大叔, 69022 阅读, 收藏, 编辑
摘要:本系列的大部分内容来自于微软源码的阅读和网络,大部分测试代码都是基于VS RC版本进行测试的。[解读ASP.NET 5 & MVC6系列(1):ASP.NET 5简介][1][解读ASP.NET 5 & MVC6系列(2):初识项目][2][解读ASP.NET 5 & MVC6系列(3):项目发布与... 阅读全文

MVC之前的那点事儿系列(10):MVC为什么不再需要注册通配符(*.*)了?

2014-06-11 08:43 by 汤姆大叔, 6346 阅读, 收藏, 编辑
摘要:文章内容很多教程里都提到了,在部署MVC程序的时候要配置通配符映射(或者是*.mvc)到aspnet_ISPAI.dll上,在.NET4.0之前确实应该这么多,但是.NET4.0之后已经不要再费事了,因为它默认就支持了。你可以会问,没有映射配置,请求这么可能会走到aspnet_ISPAI.dll上呢... 阅读全文

MVC之前的那点事儿系列(9):MVC如何在Pipeline中接管请求的?

2014-06-10 09:13 by 汤姆大叔, 4294 阅读, 收藏, 编辑
摘要:文章内容上个章节我们讲到了,可以在HttpModules初始化之前动态添加Route的方式来自定义自己的HttpHandler,最终接管请求的,那MVC是这么实现的么?本章节我们就来分析一下相关的MVC源码来验证一下我们的这个问题。先创建一个MVC3的Web Application,选择默认的模板以... 阅读全文

MVC之前的那点事儿系列(8):UrlRouting的理解

2014-06-09 08:53 by 汤姆大叔, 8851 阅读, 收藏, 编辑
摘要:文章内容根据对Http Runtime和Http Pipeline的分析,我们知道一个ASP.NET应用程序可以有多个HttpModuel,但是只能有一个HttpHandler,并且通过这个HttpHandler的BeginProcessRequest(或ProcessRequest)来处理并返回请... 阅读全文

MVC之前的那点事儿系列(7):WebActivator的实现原理详解

2014-06-06 08:46 by 汤姆大叔, 10499 阅读, 收藏, 编辑
摘要:文章内容上篇文章,我们分析如何动态注册HttpModule的实现,本篇我们来分析一下通过上篇代码原理实现的WebActivator类库,WebActivator提供了3种功能,允许我们分别在HttpApplication初始化之前,之后以及ShutDown的时候分别执行指定的代码,示例如下:[ass... 阅读全文

MVC之前的那点事儿系列(6):动态注册HttpModule

2014-06-05 08:58 by 汤姆大叔, 9379 阅读, 收藏, 编辑
摘要:文章内容通过前面的章节,我们知道HttpApplication在初始化的时候会初始化所有配置文件里注册的HttpModules,那么有一个疑问,能否初始化之前动态加载HttpModule,而不是只从Web.config里读取?答案是肯定的, ASP.NET MVC3发布的时候提供了一个Microso... 阅读全文

MVC之前的那点事儿系列(5):Http Pipeline详细分析(下)

2014-06-04 08:50 by 汤姆大叔, 6782 阅读, 收藏, 编辑
摘要:文章内容接上面的章节,我们这篇要讲解的是Pipeline是执行的各种事件,我们知道,在自定义的HttpModule的Init方法里,我们可以添加自己的事件,比如如下代码:public class Test : IHttpModule{ public void Init(HttpApplicat... 阅读全文

MVC之前的那点事儿系列(4):Http Pipeline详细分析(上)

2014-06-03 08:55 by 汤姆大叔, 5594 阅读, 收藏, 编辑
摘要:文章内容继续上一章节的内容,通过HttpApplicationFactory的GetApplicationInstance静态方法获取实例,然后执行该实例的BeginProcessRequest方法进行执行余下的Http Pipeline 操作,代码如下:// Get application ins... 阅读全文

MVC之前的那点事儿系列(3):HttpRuntime详解分析(下)

2014-05-30 08:56 by 汤姆大叔, 5128 阅读, 收藏, 编辑
摘要:文章内容话说,经过各种各样复杂的我们不知道的内部处理,非托管代码正式开始调用ISPAIRuntime的ProcessRequest方法了(ISPAIRuntime继承了IISPAIRuntime接口,该接口可以和COM进行交互,并且暴露了ProcessRequest接口方法)。至于为什么要调用这个方... 阅读全文

MVC之前的那点事儿系列(2):HttpRuntime详解分析(上)

2014-05-29 08:42 by 汤姆大叔, 9158 阅读, 收藏, 编辑
摘要:文章内容从上章文章都知道,asp.net是运行在HttpRuntime里的,但是从CLR如何进入HttpRuntime的,可能大家都不太清晰。本章节就是通过深入分析.Net4的源码来展示其中的重要步骤。请先看下图:首先,CLR在初始化加载的时候,会加载一个非常重要的类AppManagerAppDom... 阅读全文

MVC之前的那点事儿系列(1):进入CLR

2014-05-28 13:12 by 汤姆大叔, 13903 阅读, 收藏, 编辑
摘要:MVC之前的那点事儿系列,是笔者在2012年初阅读MVC3源码的时候整理的,主要讲述的是从HTTP请求道进入MVCHandler之前的内容,包括了原创,翻译,转载,整理等各类型文章,当然也参考了博客园多位大牛的文章,对此表示感谢,这次有时间贴出来,希望对大家有用。主要内容本文讲解的是:服务器接受Ht... 阅读全文

MVC之前的那点事儿系列

2014-05-28 12:06 by 汤姆大叔, 12483 阅读, 收藏, 编辑
摘要:MVC之前的那点事儿系列,是笔者在2012年初阅读MVC3源码的时候整理的,主要讲述的是从HTTP请求道进入MVCHandler之前的内容,包括了原创,翻译,转载,整理等各类型文章,当然也参考了博客园多位大牛的文章,对此表示感谢,这次有时间贴出来,希望对大家有用。MVC之前的那点事儿系列(1):进入... 阅读全文

大叔手记(20):ASP.NET MVC中使用jQuery时的浏览器缓存问题

2012-02-16 14:49 by 汤姆大叔, 8947 阅读, 收藏, 编辑
摘要:介绍尽管jQuery在浏览器ajax调用的时候对缓存提供了很好的支持,还是有必要了解一下如何高效地使用http协议。首先要做的事情是在服务器端支持HTTP GET,定义不同的URL输出不同的数据(MVC里对应的就是action)。如果要使用同一个地址获取不同的数据,那就不对了,一个HTTP POST也不行因为POST不能被缓存。许多开发人员使用POST主要有2个原因:明确了数据不能被缓存,或者是避免JSON攻击(JSON返回数组的时候可以被入侵)。缓存解释jQuery全局对象里的ajax方法提供了一些options来支持缓存和Conditional GETs功能。$.ajax({ ifM... 阅读全文

大叔手记(18):利用Elmah和Google体验一把入侵的快感

2012-01-13 15:28 by 汤姆大叔, 13417 阅读, 收藏, 编辑
摘要:介绍关于ELMAH,相信大家都不陌生了,最流行的错误日志记录组件,用过的人都知道其强大的威力,可以记录非常详细的错误信息供管理员和开发人员进行分析。Elmah配置起来也非常简单,但是同时也带来了一个问题:那就是如果配置不好的话,就会被入侵,而且入侵的方法非常非常简单,本文我讲演示一下,如何利用Elmah错误信息和Google搜索来入侵一个站点,同时本文也提供了正确的Elmah配置方法。原文整理自:http://www.troyhunt.com/2012/01/aspnet-session-hijacking-with-google.html注1:本人目的是让大家正确配置ELMAH,不是教大家入 阅读全文

大叔手记(17):大叔2011年读过的书及2012年即将要读的书

2012-01-04 09:39 by 汤姆大叔, 26414 阅读, 收藏, 编辑
摘要:前言2011年是大叔最累的一年(基本上都是晚上12点以后睡觉,早上6点30分起),读得书也是异常的多,一方面要保持自己的技术在最前列,另外方面技术管理和项目管理方面的东西也要进一步进阶,2011年读过的书超过60本(也包括只收藏不读的书,还有一些非常小的英文电子书就不列了),除了一些大牛的书,其它的书基本上都是粗读的(一周一本),同时2012年的书也是按照这个计划来安排的,即:国际/国内大牛的书通读,一般的书粗读,以保证技术人员和管理人员的先进性:)。带 [荐]字的都是推荐大家读的。看了这篇帖子,大家千万别像我这么变态地读书,因为大叔已经不怎么亲自Coding了,所有以大量的时间读书。大叔在这 阅读全文

大叔手记(16):分析URL Routing和URL Rewriting两者之间的不同

2011-12-27 14:07 by 汤姆大叔, 10658 阅读, 收藏, 编辑
摘要:前言前面有2篇帖子提到了关于URL Routing的特性,但是发现有很多人误会URL Routing就是URl Rewriting,其实2个虽然都提供相似的功能(提高友好的URL方便搜索引起收录),但是2者的原理和运行周期是完全不一样的,本篇文章我们就来分析一下具体有什么不同。例子在分析原理之前,我们先来做一个例子测试一下(IIS URL Rewrite模块需要IIS7的支持)。1.为Customer/1的URL建立对应的MVC程序首先建立一个普通的MVC3程序,建立一个简单的CustomerController以及一个简单的Detail action,代码如下:public class Cu 阅读全文

大叔手记(14):利用Routing特性提高ASP.NET MVC3站点的SEO权重

2011-12-23 14:21 by 汤姆大叔, 6718 阅读, 收藏, 编辑
摘要:简介我们在开发互联网程序的时候,有个很重要的事情就是做搜索引擎优化(SEO),我们都知道ASP.NET MVC程序提供了友好的URL以及永久重定向的支持,这些友好的URL是利用Routing系统的特性来支持的,但是在这个Routing里有个问题,就是多个不同的地址和指向同一个action方法,那对于搜索引擎来说就意味着你的站点有很多地址的内容都是重复的。 本章内容将展示如果解决这一问题。正文对于SEO,一个地址对应一个唯一独立的内容是保证最好权重的一个重要步骤,所以我们需要确保每一个URL地址对应的内容都是不重复的(对于MVC来说也就是不同的Action),但ASP.NET MVC3程序默认是 阅读全文

大叔手记(9):小心使用IHttpHandler下的IsReusable属性

2011-12-17 20:39 by 汤姆大叔, 16589 阅读, 收藏, 编辑
摘要:简介我们平时在开发的时候,经常做一些自定义的HttpHandler,每次再继承IHttpHandler接口的时候,都要设置IsReusable的值,通常我们都是设置返回true,可是我们要小心这个返回值,因为设置为true的时候有很多前提条件,其中最重要的2个是:线程要安全一个请求的HttpHandler实例下的状态或上下文信息不能被另外一个请求共享。再深一点MSDN对IsReusable的解释非常少:获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例。首先,IsReusable这个属性其实用来指明IHttpHandler实现类的实例是否可以被用来处理多个请求。当通过AS 阅读全文

大叔手记(6):巧用ASP.net MVC3里的HandleErrorAttribute

2011-12-15 08:42 by 汤姆大叔, 11514 阅读, 收藏, 编辑
摘要:前言一直在给Team的人强调“Good programming is good Error Handling”,没人喜欢YSOD(Yellow Screen of Death)。我每次看到黄页的时候都是心惊肉跳的,尤其是在给客户演示的时候,所以在任何时候,如果出现黄页是由于你开发的代码导致的话,对不起,我会给你的绩效打很低的分。当然,有些情况的黄页,在某些特殊的情况,我们可能真的无法预知,但我们起码得一些技巧让终端用户看不到这个YSOD页面。方案幸运的是,在MVC3里有现成的功能支持让我们可以做到这一点,它就是HandleErrorAttribte类,有2种方式可以使用它,一是在类或者方法上直 阅读全文

【翻译】ASP.NET MVC:转化业务对象到Select List Items上

2011-11-18 10:41 by 汤姆大叔, 5784 阅读, 收藏, 编辑
摘要:我们经常将一些业务对象的Class绑定到Dropdown box或Select List上,而且业务对象一般都会有基类。这篇帖子里我讲展示给大家的是如何利用业务对象的基类,写少量代码用扩展方法实现转换业务对象集合到ASP.NET MVC上的Select上。BusinessBase, BaseEntity和其他基类我喜欢为所有的业务类设置基类,以便于在上下文里我可以很容易地使用它们。 NB!很多人说为所有的业务类设置基类是不错的注意,它们也建议在数据库里用同样的方式,以便和基类进行mapping,但是有的人设置基类很不错,但是不建议在数据库层面也坐这种事情(比如,所有的业务对象都要包含标识)。具 阅读全文