03 2014 档案
摘要:在总体介绍了筛选器及其提供机制(《深入探讨ASP.NET MVC的筛选器》)之后,我们按照执行的先后顺序对四种不同的筛选器进行单独介绍,首先来介绍最先执行的AuthorizationFilter。从命名来看,AuthorizationFilter用于完成授权相关的工作,所以它应该在Action方法被调用之前执行才能起到授权的作用。不仅限于授权,如果我们希望目标Action方法被调用之前中断执行的流程“做点什么”,都可以以AuthorizationFilter的形式来实现。[本文已经同步到《How ASP.NET MVC Works?》中]目录一、IAuthorizationFilter二、Au
阅读全文
posted @ 2014-03-21 15:34
繁华落尽、
摘要:前几天有一个朋友在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很长时间了,而且较之前两个版本发生了非常大的变化,由于本
阅读全文
摘要:在《再谈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的通信协议
阅读全文
摘要:C# 3.0的扩展特性主要包括以下几点,我们在后面也会按照这个顺序进行介绍:1、隐式局部变量(implicitly typed local variables),通过初始化该局部变量的表达式自动推断出该变量的类型。2、扩展方法(extention methods),可以利用附加方法拓展已经存在的类型和构造类型。3、Lambda表达式(lambda expressions),匿名方法的革新,能够提供更好的类型推导以及到委托类型和表达式树的转换。4、表达式树(expression trees),允许Lambda表达式以数据(表达式树)的形式存在,而不是代码(委托)。5、对象初始化器(object
阅读全文
摘要: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),而这个文档是
阅读全文
摘要:在Mvc2.0中,新增加了一个特性就是Areas。在没有有使用Areas的情况下,我们的Mvc项目组织是下面这样的。当项目庞大的时候,Controllers,Model,View文件下下面势必会有很多文件。项目将难以管理。 通过使用Areas使我们可以很好的组织项目,通过单机添加Areas(区域),使用Areas来组织项目。可以得到新的项目组织结构。 First,Second对应着我们项目的子模块(First,Second命名不是很好)。在这两个文件夹下,有各自独立的Controllers,Models,Views。此外还多了个文件AreaRegistration为后缀的.cs文件. 这个文.
阅读全文
摘要:关于为什么使用异步Controller,这里不做备忘,三岁小孩都懂。主要的备忘是如何使用AsyncController。//这个action以Async结尾,并且返回值是void public void TestAsync() { //实现异步action加计数1 AsyncManager.OutstandingOperations.Increment(); FileStream fileStream = new FileStream(@"C:\Users\wuxq\Documents\Visu...
阅读全文
摘要:在Mvc源码的ControllerActionInvoker的InvokeAction方法里面有一个FindAction方法,FindAction方法在ControllerDescriptor里面定义为虚方法,而ReflectedControllerDescriptor是继承自ControllerDescriptor。其FindAction方法如下:public override ActionDescriptor FindAction(ControllerContext controllerContext, string actionName) { if (contro...
阅读全文
摘要:Mvc的过滤器是特性类,可以使我们在执行Action之前,执行Action之后,执行Action发生异常时,编写相关的处理代码实现某些逻辑。下面是四个基本的Filter接口。 上面这四个基本的Filter接口又被其他类所继承实现。框架图如下: 可以发现具体的Filter类,如ActionFilterAttribute或者AuthorizeAttribute除了各自实现基本接口IActionFilter和IAuthorizationFilter之外还继承抽象类FilterAttribute,而后者又继承自Attribute类。FilterAttribute除了一个protected的构造函数..
阅读全文
摘要:其实关于Mvc的验证在上一篇已经有讲过一些了,可以通过在我们定义的Model上面添加相应的System.ComponentModel.DataAnnotations空间下的验证属性。在服务器端通过ModelBinder来接受提交的数据就能实现自动验证。如下例子. 定义一个PriceModelpublic class PriceModel { [Required]//通过定义这个实现Title字段为必输 [DisplayName("标题")] public string Title { get; set; } [Di...
阅读全文
摘要:在Mvc R2中,新引入了一些扩展方法,如后面带一个for的方法,这些扩展方法会根据Model的属性自定生成相应的Html元素,如Html.EditFor(Model=>Model.IsApprove),当IsApproved为布尔类型时显示checkbox文本框,这样能简化我们的工作并且能够利用到ModelBinding。当我们调用Html.EditFor的时候,会调用到TemplateHelpers的方法去查找相应的模板,框架本来定义好了两个模板,就是DefaultDisplayTemplates和DefaultEditorTemplates分别对应着显示Display和Edit编辑
阅读全文
摘要:在ASP.NET MVC中,每个请求都被映射到一个Action方法,我们可以在action的方法中定义相应类型的参数,View中通过post、get方式提交的request参数,只要名称一致就会对应到相应的action参数,一切似乎理所当然,但是请注意我们的http是基于文本协议的,提交上去的参数应该是被认为是字符串形式,但是我们可以在action中定义string类型之外的其他参数,如int,datetime。在提交到action进行请求的过程里肯定有一个转换。 MVC框架里实现这个转换的就是DefaultModelBinder,DefaultModelBinder实现了IModelBin.
阅读全文
摘要:在MVC下不是通过对物理文件的映射来实行访问的,而是通过定义后的路由Url来实现访问的。在前一篇讲到我们是在全局文件下进行路由配置。routes.MapRoute("Default", "{controller}/{action}/{id}", new{ controller = "Home", action = "Index", id = UrlParameter.Optional } ); 上面方法的三个参数分别是:路由名称,匹配的Url,默认的匹配路由。 对于第二个参数是要匹配的url,以'/'
阅读全文
posted @ 2014-03-21 09:59
繁华落尽、
摘要:用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
繁华落尽、
摘要:这是一个经常被时时提出来的问题,很多时候我们以为理解了、懂了,但深究一下,我们却发现并不懂。方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法,问原因也说不出来所以然,或者简单的回答两者定义的区别,静态方法不需要new就可以使用实例化方法需要new了以后才可以使用。。。。我们真的理解了吗?从实际项目开发说起,这里有开发项目的三种方式:开发项目中把BLL和DAL分开,在BLL调用DAL的代码。一、在DAL中使用静态方法,不创建实例直接调用(大概有很多人都使用这种方式开发)class DAL{public static string GetUserName(...);}在B
阅读全文
posted @ 2014-03-20 14:33
繁华落尽、
摘要:using System;using System.Collections.Generic;using System.Text;namespace 装饰模式{ class Person { public Person() { } private string name; public Person(string name) { this.name = name; } public virtual void Show() { Console.WriteLine("装扮的{0}", name); } } class Finery : Person { protected Per
阅读全文
posted @ 2014-03-20 14:31
繁华落尽、
摘要:这是这段时间学习设计模式的时候的源代码。单例(单件)模式的五种实现。通过一个计数器的例子调用验证一下。把下面的代码直接拷进vs下,运行就可以了。(控制台应用程序)以后把剩余的设计模式有空儿就粘上来。[csharp] view plaincopyusing System; using System.Collections.Generic; using System.Text; using System.Threading; namespace NetFarmwork { class NetFarmwork { static void Mai...
阅读全文
posted @ 2014-03-20 14:29
繁华落尽、
摘要:asp.net mvc 4.0 新特性之移动特性为不同的客户端提供不同的视图手动重写 UserAgent,从而强制使用对应的视图示例1、演示如何为不同的客户端提供不同的视图Global.asax.cs/* * 为了更好地支持移动设备,mvc 4.0 带来了一些新的特性 * * 本 demo 演示如何方便地为不同客户端提供不同的视图 */using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Http;using System.Web.Mvc;using .
阅读全文
posted @ 2014-03-20 14:16
繁华落尽、
摘要:前言: 在c#开发中,有时候我们需要读取 Attribute中的信息(关于Attribute, 我自己把他理解成一个可以为类,属性标记的东西,这个标记可以为你提供一些关于类,方法,属性的额外信息)我们如何获取这些标记的信息,如何获取自定义Attribute信息。正文:1.获取一个枚举的详细信息假设我们有这样一个枚举public enum Category { /// /// 英语 /// English, /// /// 汉语 /// Chinese, /...
阅读全文
posted @ 2014-03-20 13:46
繁华落尽、
摘要:C#中的定制特性(Attributes)介绍Attributes是一种新的描述信息,我们既可以使用attributes来定义设计期信息(例如:帮助文件、文档的URL),还可能用attributes定义运行时信息(例如:使XML中的元素的成员字段关联起来)。我们也可以用attributes来创建一个“自描述”的组件。这篇指南中我们将明白怎么创建属性并将其绑定到各种语言元素上,另外我们怎样在运行环境下获取到attributes的一些信息。定义MSDN中做如下定义:“An attribute is a piece of additionaldeclarative information that i
阅读全文
posted @ 2014-03-20 13:44
繁华落尽、
摘要:下面就和大家分享下我在asp.net官网看到的资料,学习到的点语法。1.通过使用@符号,可以直接在html页面中写C#或者VB代码:运行后:2.页面中的C#或者VB代码都放在大括号中。运行后:3.每一行代码通过分号来结束:运行后:4.在页面中输出特殊字符,双引号和斜杠:运行效果:5.通过Request属性得到当前页面的url,RequestType等。运行结果:6.通过if---else:场景是,我们通过判断当前浏览器是否向服务器端post数据,如果post则提示你点击了Post按钮。运行后:-爱因斯坦小脑2011-05-02 14:55下面是一个完整的例子:当点击submit按钮后,@tot
阅读全文
posted @ 2014-03-20 13:42
繁华落尽、
摘要:ASP.NET MVC是一种构建web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架; ASP.NET约定优于配置;基本分为模型(对实体数据的描述)、视图(一个动态生成HTML页面的模板)、控制器(协调用户的请求返回模型实体或返回其他数据根据对应模板动态生成html返回给用户) 请求都是先经过Controller找到下面的Action(即返回值为ActionResult的方法);在默认路由的情况下,/Home/Index 则请求的是HomeController类下面的Index方法,返回视图名称为Index的视图;HomeContro
阅读全文
posted @ 2014-03-20 13:41
繁华落尽、
摘要:Razor是基于framewor4以上写的一个开源项目:https://github.com/Antaris/RazorEngine/Razor是包含了模板引擎和动态编译两部分。本部分就简单记录了模板引擎的一些语法,之后用Razor做一个代码生成器,就使用Razor的语法来。Razor的发布是和MVC一起的,作为MVC的视图模板引擎。Razor文件类型 Razor可以在vb.net和C#中使用。分别对应了两种文件类型,.vbhtml和.cshtmlRazor的标识符 @字符被定义为Razor服务器代码块的标识符,后面的表示是服务器代码了。web form中使用中写服务器代码一个道理。在vs工具
阅读全文
posted @ 2014-03-20 13:39
繁华落尽、

浙公网安备 33010602011771号