摘要: 在总体介绍了筛选器及其提供机制(《深入探讨ASP.NET MVC的筛选器》)之后,我们按照执行的先后顺序对四种不同的筛选器进行单独介绍,首先来介绍最先执行的AuthorizationFilter。从命名来看,AuthorizationFilter用于完成授权相关的工作,所以它应该在Action方法被调用之前执行才能起到授权的作用。不仅限于授权,如果我们希望目标Action方法被调用之前中断执行的流程“做点什么”,都可以以AuthorizationFilter的形式来实现。[本文已经同步到《How ASP.NET MVC Works?》中]目录一、IAuthorizationFilter二、Au 阅读全文
posted @ 2014-03-21 15:34 繁华落尽、 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 前几天有一个朋友在MSN上问我“ASP.NET从最初的接收到Http request到最终生成Response的整个流程到底是怎样的?”我觉得这个问题涉及到IIS和ASP.NETASP.NET Runtime的处理模型的问题,并不是三言两语就能说清楚的,所以决定写这样一篇介绍IIS和ASP.NET Runtime Process Model的文章,谈谈我对此的一个粗浅的认识,如果有什么不对的地方,希望大家及时指正。这篇文章大体分为两个部分,第一部分我将谈谈IIS的两个不同的版本—IIS 5.x和IIS 6(虽然IIS 7已经Release很长时间了,而且较之前两个版本发生了非常大的变化,由于本 阅读全文
posted @ 2014-03-21 14:59 繁华落尽、 阅读(573) 评论(0) 推荐(0) 编辑
摘要: 在《再谈IIS与ASP.NET管道》介绍各种版本的IIS的设计时,我们谈到IIS 7.0因引入WAS提供了对非HTTP协议的支持。这个对于WCF的服务寄宿来说意义重大,它意味着我们通过IIS/WAS寄宿的服务终结点不仅仅可以采用BasicHttpBinding、WSHttpBinding/WS2007HttpBinding等基于HTTP协议的绑定,也可以采用NetTcpBinding、NetNamedPipeBinding和NetMsmqBinding。在默认的情况下,IIS 7.0针对非HTTP支持的特性是关闭的。为了将一个IIS中的Web应用作为WCF服务的宿主,并采用非HTTP的通信协议 阅读全文
posted @ 2014-03-21 14:58 繁华落尽、 阅读(386) 评论(0) 推荐(0) 编辑
摘要: C# 3.0的扩展特性主要包括以下几点,我们在后面也会按照这个顺序进行介绍:1、隐式局部变量(implicitly typed local variables),通过初始化该局部变量的表达式自动推断出该变量的类型。2、扩展方法(extention methods),可以利用附加方法拓展已经存在的类型和构造类型。3、Lambda表达式(lambda expressions),匿名方法的革新,能够提供更好的类型推导以及到委托类型和表达式树的转换。4、表达式树(expression trees),允许Lambda表达式以数据(表达式树)的形式存在,而不是代码(委托)。5、对象初始化器(object 阅读全文
posted @ 2014-03-21 14:26 繁华落尽、 阅读(325) 评论(0) 推荐(0) 编辑
摘要: C# 4.0动态查找类型动态操作运行时查找示例带有动态参数的重载解析动态语言运行时已知问题命名参数和可选参数可选参数命名的和可选的实参重载解析互操作特性动态引入无PIA的编译ref 省略ref已知问题变性协变性逆变性限制COM Example COM示例Relationship with Visual Basic 与Visual Basic的关系资源简介Microsoft Visual C# 3.0作为Visual Studio 2008的一部分发布以来已经快一年了。在VS Managed Languages团队,我们一直努力创建该语言的下一个版本(没什么惊喜,就是C# 4.0),而这个文档是 阅读全文
posted @ 2014-03-21 14:25 繁华落尽、 阅读(1034) 评论(0) 推荐(0) 编辑
摘要: 在Mvc2.0中,新增加了一个特性就是Areas。在没有有使用Areas的情况下,我们的Mvc项目组织是下面这样的。当项目庞大的时候,Controllers,Model,View文件下下面势必会有很多文件。项目将难以管理。 通过使用Areas使我们可以很好的组织项目,通过单机添加Areas(区域),使用Areas来组织项目。可以得到新的项目组织结构。 First,Second对应着我们项目的子模块(First,Second命名不是很好)。在这两个文件夹下,有各自独立的Controllers,Models,Views。此外还多了个文件AreaRegistration为后缀的.cs文件. 这个文. 阅读全文
posted @ 2014-03-21 10:12 繁华落尽、 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 关于为什么使用异步Controller,这里不做备忘,三岁小孩都懂。主要的备忘是如何使用AsyncController。//这个action以Async结尾,并且返回值是void public void TestAsync() { //实现异步action加计数1 AsyncManager.OutstandingOperations.Increment(); FileStream fileStream = new FileStream(@"C:\Users\wuxq\Documents\Visu... 阅读全文
posted @ 2014-03-21 10:10 繁华落尽、 阅读(1322) 评论(0) 推荐(0) 编辑
摘要: 在Mvc源码的ControllerActionInvoker的InvokeAction方法里面有一个FindAction方法,FindAction方法在ControllerDescriptor里面定义为虚方法,而ReflectedControllerDescriptor是继承自ControllerDescriptor。其FindAction方法如下:public override ActionDescriptor FindAction(ControllerContext controllerContext, string actionName) { if (contro... 阅读全文
posted @ 2014-03-21 10:09 繁华落尽、 阅读(355) 评论(0) 推荐(0) 编辑
摘要: Mvc的过滤器是特性类,可以使我们在执行Action之前,执行Action之后,执行Action发生异常时,编写相关的处理代码实现某些逻辑。下面是四个基本的Filter接口。 上面这四个基本的Filter接口又被其他类所继承实现。框架图如下: 可以发现具体的Filter类,如ActionFilterAttribute或者AuthorizeAttribute除了各自实现基本接口IActionFilter和IAuthorizationFilter之外还继承抽象类FilterAttribute,而后者又继承自Attribute类。FilterAttribute除了一个protected的构造函数.. 阅读全文
posted @ 2014-03-21 10:06 繁华落尽、 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 其实关于Mvc的验证在上一篇已经有讲过一些了,可以通过在我们定义的Model上面添加相应的System.ComponentModel.DataAnnotations空间下的验证属性。在服务器端通过ModelBinder来接受提交的数据就能实现自动验证。如下例子. 定义一个PriceModelpublic class PriceModel { [Required]//通过定义这个实现Title字段为必输 [DisplayName("标题")] public string Title { get; set; } [Di... 阅读全文
posted @ 2014-03-21 10:05 繁华落尽、 阅读(687) 评论(0) 推荐(0) 编辑
摘要: 在Mvc R2中,新引入了一些扩展方法,如后面带一个for的方法,这些扩展方法会根据Model的属性自定生成相应的Html元素,如Html.EditFor(Model=>Model.IsApprove),当IsApproved为布尔类型时显示checkbox文本框,这样能简化我们的工作并且能够利用到ModelBinding。当我们调用Html.EditFor的时候,会调用到TemplateHelpers的方法去查找相应的模板,框架本来定义好了两个模板,就是DefaultDisplayTemplates和DefaultEditorTemplates分别对应着显示Display和Edit编辑 阅读全文
posted @ 2014-03-21 10:03 繁华落尽、 阅读(1477) 评论(0) 推荐(1) 编辑
摘要: 在ASP.NET MVC中,每个请求都被映射到一个Action方法,我们可以在action的方法中定义相应类型的参数,View中通过post、get方式提交的request参数,只要名称一致就会对应到相应的action参数,一切似乎理所当然,但是请注意我们的http是基于文本协议的,提交上去的参数应该是被认为是字符串形式,但是我们可以在action中定义string类型之外的其他参数,如int,datetime。在提交到action进行请求的过程里肯定有一个转换。 MVC框架里实现这个转换的就是DefaultModelBinder,DefaultModelBinder实现了IModelBin. 阅读全文
posted @ 2014-03-21 10:02 繁华落尽、 阅读(597) 评论(0) 推荐(0) 编辑
摘要: 在MVC下不是通过对物理文件的映射来实行访问的,而是通过定义后的路由Url来实现访问的。在前一篇讲到我们是在全局文件下进行路由配置。routes.MapRoute("Default", "{controller}/{action}/{id}", new{ controller = "Home", action = "Index", id = UrlParameter.Optional } ); 上面方法的三个参数分别是:路由名称,匹配的Url,默认的匹配路由。 对于第二个参数是要匹配的url,以'/' 阅读全文
posted @ 2014-03-21 09:59 繁华落尽、 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 用MVC来做开发也有一段时间了,但是感觉一直没入门,就徘徊在似懂非懂的层次,和去年刚毕业学习WebForm时一样,当时通过张子阳老兄的几篇文章,明白了请求处理流程,页面生命周期才真正明白了WebForm的强大。由于MVC的学习资料比较少,牛人的技术博客也只是讲一些基础的而已。因此决定通过Asp.Net MVC源码来学习,由于是开源的,也不用Reflector作为辅助工具。首先还是明白下MVC的请求处理流程。有参考了MSDN上面的文章(http://msdn.microsoft.com/zh-cn/library/dd381612.aspx) 当应用程序第一次接受请求的时候,在Global.as 阅读全文
posted @ 2014-03-21 09:58 繁华落尽、 阅读(290) 评论(0) 推荐(0) 编辑