ASP.NET MVC Controller IoC应用[上篇]

= null ? No二、Controller与Model的分离  在《MVC、MVP以及Model2[下篇]》中我们谈到ASP.NET MVC是基于MVC的变体Model2设计的。ASP.NET MVC所谓的Model仅仅表示绑定到View上的数据,我们一般称之为View Model。而真正的Model一般意义上指维护应用状态和提供业务功能操作的领域模型,或者是针对业务层的入口或者业务服务的代理。真正的MVC在ASP.NET MVC中的体现如下图所示。  对于一个ASP.NET MVC应用来说,用户交互请求直接发送给Controller。如果涉及到针对某个个业务功能的调用,Controll
http://www.w3dev.cn/article/20120609/ASP.NET-MVC-Controller-IoC-I.aspx

ASP.NET MVC Controller IoC应用[下篇]

最终被用于 Controller对象的激活,那么我们可以自定义ControllerActivator的方式将IoC引入Controller激活系统。我们接下 来自定义的ControllerActivtor基于另一个IoC框架Ninject,较之Unity,Ninject是一个更加轻量级也更适合 ASP.NET MVC的IoC框架。我们将自定义的ControllerActivator起名为NinjectControllerActivator,全部定义如 下。[源代码从这里下载] 1: public class NinjectControllerActivator: IControllerA
http://www.w3dev.cn/article/20120609/ASP.NET-MVC-Controller-IoC-II.aspx

ASP.NET mvc URL与物理文件的分离

 表现为请求地址与目标Controller和Action的动态映射的URL路由系统并不是专属于ASP.NET MVC,而是直接建立在ASP.NET 中。ASP.NET通过URL路由系统实现了请求地址与物理文件的分离。[源代码地址从这里下载]一、URL与物理文件的分离  对 于一个 ASP.NET Web Form应用来说,任何一个请求都对应着某个具体的物理文件。部署在Web服务器上的物理文件可以是静态的(比如图片和静态HTML文件等),也可以是动 态的(比如.asxp文件)。对于静态文件的请求,ASP.NET直接返回文件的整个内容;而针对动态文件的请求则会触发相关代码的执行,并最终返回执行 后
http://www.w3dev.cn/article/20120603/ASP.NET-mvc-router-URL-Physical-file-Separate.aspx

ASP.NET mvc路由映射

然请求地 址完全满足我们注册路由对象的URL模板模式,但是ASP.NET并没有对请求地址实施路由。原因很简单,如果中间发生了路由,基于页面的 RouteData的各项属性都不可能为空。[实例源代码下载]  那么是否意味着如果请求地址对应着一个现存的物理文件,ASP.NET就会自动忽略路由呢?实则不然,或者说不对现有文件实施路由仅仅默认采用的行 为。是否对现有文件实施路由取决于代表全局路由表的RouteCollection对象的RouteExistingFiles属性,该属性默认情况下为 False,我们可以将此属性设置为True使ASP.NET路由系统忽略现有物理文件的存在,总是按照注册的路由
http://www.w3dev.cn/article/20120603/ASP.NET-mvc-router-mapping.aspx

ASP.NET mvc路由规则生成URL

  ASP.NET 的路由系统主要具有两个方面的应用,其一就是通过注册URL模板与物理文件路径的匹配实现请求地址和物理地址的分离;另一个则是通过注册的路由规测生成一 个相应的URL。后者通过调用RouteCollection类型的GetVirtualPath方法来实现。[源代码从这里下载]  如 下面的代码片断所示,GetVirtualPath定义了两个GetVirtualPath方法重载,它们共同的参数requestContext和 values分别表示请求上下文(RouteData和HTTP上下文的封装)和用于替换定义在URL模板中的变量站位符的值。另一个 GetVirtualPath方
http://www.w3dev.cn/article/20120603/ASP.NET-mvc-router-rule-create-url.aspx

ASP.NET MVC路由扩展:路由映射

  上周我写了三篇文章(ASP.NET mvc URL与物理文件的分离、ASP.NET mvc路由映射、ASP.NET mvc路由规则生成URL) 详细地介绍了ASP.NET的路由系统。ASP.NET的路由系统旨在通过注册URL模板与物理文件之间的映射进而实现请求地址与文件路径之间的分离,但 是对于ASP.NET MVC应用来说,请求的目标不再是一个具体的物理文件,而是定义在某个Controller类型中的Action方法。出于自身路由特点的需 要,ASP.NET对ASP.NET的路由系统进行了相应的扩展。一、基本路由映射  通过前面的介绍我们知道基于某个物理文件的路由映射通过调用代表全局路由
http://www.w3dev.cn/article/20120603/ASP.NET-mvc-router-extend-router-mapping.aspx

ASP.NET MVC路由扩展:链接和URL的生成

narystring, object htmlAttributes); 14: }三、实例演示:创建一个RouteHelper模拟UrlHelper的URL生成逻辑  为了让读者对UrlHelper如果利用ASP.NET路由系统进行URL生成的逻辑具有一个深刻认识,我们接下来创建一个名为 RouteHelper的等效帮助类。我们将RouteHelper定义在创建的一个ASP.NET Web应用中,如下面的代码片断所示,RouteHelper具有RequestContext和RouteCollection两个属性,前者在构造函 数中指定,后者则只是使用通过RouteTable的Rout
http://www.w3dev.cn/article/20120603/ASP.NET-mvc-router-extend-link-url-create.aspx

ASP.NET MVC路由实现原理-HttpHandler的动态映射

Handler GetHttpHandler(RequestContext requestContext) 5: { 6: return new MvcHandler(requestContext) 7: } 8: }三、 ASP.NET路由系统扩展  到此为止我们已经对ASP.NET的路由系统的实现进行了详细介绍,总的来说,整个路由系统是通过对HttpHandler的动态注册的方式来实现 的。具体来说,UrlRoutingModule通过对代表Web应用的HttpApplication的 PostResolveRequestCache事件的注
http://www.w3dev.cn/article/20120603/ASP.NET-mvc-router-httphandler-Dynamic-mapping.aspx

ASP.NET MVC通过URL路由多语言的支持

持多语言的Web应用,一个很常见的使用方式就是通过请求地址来控制界面 呈现所基于的语言文化,比如我们在表示请求地址的URL中将上语言文化代码(比如en或者en-US)来指导服务器应该采用怎样的语言来显示界面的内容。 对于一个ASP.NET MVC应用来说,很容易通过URL路由来实现这样一个功能。  在具体介绍实现之前,我们通过一个简单的例子谈谈最终实现的效果。在通过ASP.NET MVC项目模板创建的空Web应用中,我们创建了如下一个HomeController,默认的Action方法Index用于呈现一个登录View。作 为Model的LoginInfo类包含UserName和Passwo
http://www.w3dev.cn/article/20120603/ASP.NET-mvc-url-router-Multi-language-support.aspx

asp.net mvc URL路由

  在一个ASP.NET MVC应用来说,针对HTTP请求的处理和相应定义Controller类型的某个Action方法中,每个HTTP请求的目标对象不再像ASP .NET Web Form应用一样是一个物理文件,而是某个Controller的某个Action。目标Controller和Action的名称包含在HTTP请求 中,而ASP.NET MVC的首要任务就是通过当前HTTP请求的解析得到正确的Controller和Action的名称。这个过程是通过ASP.NET MVC的URL路由机制来实现的。一、RouteData  ASP.NET 定义了一个全局的路由表,路由表中的每个路由对象对
http://www.w3dev.cn/article/20120602/asp.net-mvc-URL-router.aspx

ASP.NET MVC Controller的激活

requestContext) 4: { 5: return new MvcHandler(requestContext); 6: } 7: }二、MvcHandler  在前面的内容中我们已经提到整个ASP.NET MVC框架是通过自定义的HttpModule和HttpHandler对象ASP.NET进行扩展实现的。这个自定义HttpModule我们已经介绍 过了,就是UrlRoutingModule,而这个自定义的HttpHandler则是我们要重点介绍的MvcHandler。  UrlRoutingModule在通过路由表解析HTTP请
http://www.w3dev.cn/article/20120602/asp.net-mvc-Controller-active.aspx

ASP.NET MVC Action的执行

Type modelType); 4: }  通过前面给出的关于ControllerActionInvoker的定义我们可以看到在构造函数中默认创建的ModelBinder对象是一个 DefaultModelBinder对象。由于仅仅是对ASP.NET MVC的模拟,定义在自定义的DefaultModelBinder中的Model绑定逻辑比ASP.NET MVC中同名类型中实现的要简单得多。  如下面的代码片断所示,绑定到参数上的数据具有三个来源:HTTP-POST Form、RouteData和Values和DataTokens,它们都是字典结构的数据集合。如果参数类型为字符串或者简
http://www.w3dev.cn/article/20120602/asp.net-mvc-Action-execute.aspx

asp.net mvc详解目录

tionAttribute示例ASP.NET MVC Model多种验证规则ASP.NET MVC客户端jQuery验证ASP.NET MVC客户端jQuery Model验证ASP.NET MVC客户端自定义验证七、Action的执行ASP.NET MVC异步Action定义和执行原理ASP.NET MVC同步与异步[上篇]ASP.NET MVC同步与异步[下篇]ASP.NET MVC的筛选器ASP.NET MVC AuthorizationFilterASP.NET MVC ActionFilter介绍ASP.NET MVC集成EntLib异常处理实例ASP.NET MVC集成EntLi
http://www.w3dev.cn/article/20120601/asp.net-mvc-learning-catalog.aspx

IIS 和 ASP.NET ISAPI

pping将对于不同Resource的请求分发给不同的ISAPI Extension,基于ASP.NET Resource的ASP.NET ISAPI如何将Request传递给ASP.NET Runtime 环境。第二部分将着重介绍在一个托管的ASP.NET Runtime 环境对传入的Http request的处理过程。我们先来看看IIS 5.x和IIS 6的处理过程。1. 一、IIS 5.x based Process Model  IIS 5.x一个显著的特征就是Web Server和真正的ASP.NET Application的分离。作为Web Server的IIS运行在一个名为In
http://www.w3dev.cn/article/20120601/IIS-ASP.NET-ISAPI.aspx

ASP.NET Http Runtime Pipeline[上篇]

Low Level的角度介绍ASP.NET的整个Http Request Processing Model。我们访问一个基于ASP.NET的资源,IIS是第一道屏障,在IIS 和 ASP.NET ISAPI我分别就IIS 5.x和IIS 6的差异介绍了IIS对Http Request的处理,今天我们来继续后面的故事。一、从Unmanaged Environment到Managed Environment  上一部分我们说到IIS收到一个基于ASP.NET资源文件的访问,它会把Http Request交给一个ASP.NET ISAPI Extension处理。ASP.NET ISAPI 会加载
http://www.w3dev.cn/article/20120601/ASP.NET-Http-Runtime-Pipeline-I.aspx

ASP.NET Http Runtime Pipeline[下篇]

pplication对象来承载。但不能说一个Application就唯一对应一个固定的HttpApplication对象。原因很简单,ASP.NET天生具有多线程的特性,需要通过相应不同的Client的访问,如果我们只用一个HttpApplication来处理这些并发的请求,会对Responsibility造成严重的影响,通过考虑到Performance的问题,ASP.NET对HttpApplication的使用采用Pool的机制:当Request到达,ASP.NET会现在HttpApplication Pool中查找未被使用的HttpApplication对象,如果没有,则创建之,否则从P
http://www.w3dev.cn/article/20120601/ASP.NET-Http-Runtime-Pipeline-II.aspx

IIS与ASP.NET管道

IIS运行在非托管的环境中,而ASP.NET管道则是托管的,从这个意义上讲,ISAPI还是连接非托管环境和托 管环境的纽带。图5反映了IIS 6.0与ASP.NET之间的桥接关系。图5 基于IIS 6.0与ASP.NET双管道设计   IIS 5.x和IIS 6.0下把两个管道进行隔离至少带来了下面一些局限与不足:相同操作的重复执行:IIS与ASP.NET之间具有一些重复的操作,比如身份验证;动态文件与静态文件处理的不一致:因 为只有基于ASP.NET的动态文件(比如.aspx、.asmx、.svc等等)的HTTP请求才能通过ASP.NET ISAPI进入ASP.NET管道,而对于一些静态文
http://www.w3dev.cn/article/20120601/ASP.NET-IIS-Pipeline.aspx

asp防sql注入源代码

  asp通用防sql注入源代码,将此段代码放在你执行sql读取数据之前,以便判断客户端提交的内容是否包含恶意注入内容dim spDim Fy_Post,Fy_Get,Fy_getIn,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr,Kill_IP,WriteSql,Fy_postIn'自定义需要过滤的字串,用 | 分隔Fy_getIn = '|#|exec|insert|select|delete|update|%|chr|char|mid|master|truncate|declare|(|)|*Fy_postIn = exec|insert|select|del
http://www.w3dev.cn/article/20120524/asp-prevent-sql-inject-source-code.aspx

WCF REST-ASP.NET Output Caching缓存

ryByParam被设置为none表示缓存项与请求的查询字符串无关。此外,该 CacheProfile还设置针对某个本地数据库中的TestTable表的SQL依赖(SQL Dependency)。关于CacheProfile的配置属于ASP.NET的范畴,在这里我们不会作过多的讨论。  既然是采用ASP.NET输出缓存,WCF服务自然需要采用IIS寄宿并采用ASP.NET 兼容模式。值得一提的是,基于AspNetCacheProfileAttribute的输出缓存仅仅针对HTTP-GET。二、实例演示:创建采用输出缓存的服务  接下来我们通过一个简单的实例来演示如何通过操作行为对某个操作的返回
http://www.w3dev.cn/article/20120523/wcf-rest-ASP.NET-Output-Caching.aspx

asp sqlserver2000 [Microsoft][ODBC SQL Server Driver][DBNETLIB]一般性网络错误。请检查网络文档

觉得不是这个问题。  后面看了下驱动字符串server配置项是.,将server=.修改为server=(local)或者server=qlServer2000所在服务器计算机名称这样就可以连接SqlServer2000了。  但是奇怪的是asp.net使用server=.配置项目时确实可以连接SqlServer2000,没出现[Microsoft][ODBC SQL Server Driver][DBNETLIB]一般性网络错误。请检查网络文档错误。  可能是上一次的系统配置不知道鼓捣了哪里,导致asp无法将server=.中的.解析为对应的SqlServer2000服务器地址。O__O"
http://www.w3dev.cn/article/20120522/asp-sqlserver2000-Microsoft-ODBC-SQL-Server-Driver-DBNETLIB.aspx

WCF授权-ASP.NET Roles授权[上篇]

ndows用户组,而是将用户的权限信息维护在相应的数据库中,通过单独的安全系统来维护。在这种情况下,基于ASP.NET角色管理模块的授权模 式是一个不错的选择。一、ASP.NET Roles提供程序  和 Membership一样,Roles也是ASP.NET一个重要的提供程序,旨在解决对角色的维护和基于角色的授权。ASP.NET Roles同样采用策略设计模式,角色的添加、删除、获取以及授权功能定义在System.Web.Security.RoleProvider这个抽象 类中。而ASP.NET默认提供了如下三个具体的RoleProvider,它们同时也体现了角色和授权信息的三种不同的存储
http://www.w3dev.cn/article/20120521/wcf-authorization-ASP.NET-Roles-I.aspx

WCF授权-ASP.NET Roles授权[下篇]

,'asprolesauthorizationdemo ' 10: ,NEWID() 11: ,'' 12: )二、在Windows认证下使用ASP.ENT Roles授权  我们授权演示的是在客户端凭证类型为Windows的情况下采用ASP.NET Roles授权模式,为此我们需要更新一下服务端和客户端的配置。注意不要忘了将根据你的实际情况修正连接字符串。下面是服务端配置。 1: ?xml version=1.0? 2: configuration 3: connect
http://www.w3dev.cn/article/20120521/wcf-authorization-ASP.NET-Roles-II.aspx

asp.net如何判断是否搜索引擎访问网站

  asp.net可以通过useragent来判断是否搜索引擎来访问网站,因为不同的搜索引擎有不同的useragent信息,具体参考 搜索引擎useragent列表  下面为C#版本的源代码 /// summary /// 判断是否为搜索引擎访问 /// /summary /// param name=useragent/param /// returns/returns public bool IsSearchEngine(string useragent) { bool engine = false; if (!str
http://www.w3dev.cn/article/20120515/asp.net-check-is-searchengine-visit-website.aspx

ASP.NET模拟WCF基础架构

服务端组件图1反映了进行服务调用的必要步骤和使用到的相关WCF组件。在本案例演示中,我们需要做的就是手工创建这些组件,并通过我们自己的代码利用它们搭建一个简易版的WCF框架。如果读者能够对本案例的实现有一个清晰的理解,相信对于整个WCF的框架就不会感到陌生了。图2显示了本案例解决方案的基本结构,总共分三个项目。Contracts用于定义服务契约,被服务端和客户端引用。客户端通过一个Console应用模拟,而服务端则通过一个ASP.NET Website实现。图2 WCF框架模拟案例应用结构步骤一、通过服务契约类型创建相关组件  WCF 在整个服务调用生命周期的不同阶段,会使用到不同的组件。我们
http://www.w3dev.cn/article/20120425/asp.net-Simulation-wcf-Architecture.aspx

利用ASP.NET兼容模式创建支持会话(Session)的WCF服务

我们谈到在采用基于IIS(或者说基于ASP.NET)的WCF服务寄宿中,具有两种截然不同的运行模式:ASP.NET并行(Side by Side)模式和ASP.NET兼容模式。对于前者,WCF通过HttpModule实现了服务的寄宿,而对于后者,WCF的服务寄宿通过一个 HttpHandler实现。只有在ASP.NET兼容模式下,我们熟悉的一些ASP.NET机制才能被我们使用,比如通过HttpContext的请求 下下文;基于文件或者Url的授权;HttpModule扩展;身份模拟(Impersonation)等。  由于在ASP.NET兼容 模式下,ASP.NET采用与.aspx Page完
http://www.w3dev.cn/article/20120425/asp.net-support-session-wcf-service.aspx

在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效

会忽略 BaseAddress的配置。  那么WCF采用怎样的方式来判断当前服务寄宿的方式是基于IIS呢,还是其他呢?答案是通过 System.Web.Hosting.HostingEnvironment的静态属性IsHosted。对于ASP.NET有一定了解的人应该很清 楚,在一个ASP.NET应用下,该属性永远返回为True。也就是说,WCF会把基于ASP.NET应用的服务寄宿,看成是基于IIS的服务寄宿,这显 然是不对的。 1: public sealed class HostingEnvironment : MarshalByRefObject 2: { //其他成员
http://www.w3dev.cn/article/20120425/asp.net-Application-hosting-baseaddress-Invalid.aspx

asp.net使用render方法替换页面内容

  在进行 ASP.NET 开发时,有时候需要对页面输出的最终HTML代码进行替换,使用render 方法很容易实现这个功能。  下面就是一个实现的方法,注释都在代码中。%@ Page Language=C# %%@ Import Namespace=System.IO %!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtdscript runat=server protected override void Re
http://www.w3dev.cn/article/20120413/asp.net-render-replace-content.aspx

检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误:8000401a

动权限的编辑默认值。验证启动权限中是否列出下列用户,如果没有列出,则添加这些用户:SYSTEMINTERACTIVEEveryoneAdministratorsIUSR_machinename*IWAM_machinename**这些帐户仅在计算机上安装有IIS的情况下才存在。13.确保允许每个用户访问,然后单击确定。14.单击确定关闭DCOMCNFG。如果你之前起用了身份模拟(在web.config中配置了identityimpersonate=true/),需要删除之!15.更新安装office,把.net可编程组件安装到本机(excel组件)如果还是不行.干脃把交互式用户换成启动用户
http://www.w3dev.cn/article/20120407/Retrieval-COM-clsid-error-8000401a.aspx

C#开发COM+组件

  可以在.NET组件中调用COM组件,同时也可以在COM组件中正常的调用.NET组件。这点带来的好处是显而易见的,一方面我们可以保持现有的技术资源,另一方面,在现有资源中可以利用.NET所带来的各种新技术。  在E/ClassLibrary1/目录下用SN命令生成一个GUID,如下所示:sn k keyfile.snk  在工程的AssemblyInfo.cs文件中加入如下语句:[assembly: AssemblyKeyFile(@e:/classlibrary1/keyfile.snk)]  作用是使这个工程文件创建的DLL文件拥有GUID(全球唯一标识符),也就是拥有一个强名称(str
http://www.w3dev.cn/article/20120404/csharp-develop-com-components.aspx