在《ASP.NET MVC下的四种验证编程方式》一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”、“标注ValidationAttribute特性”、“让数据类型实现IValidatableObject或者IDataErrorInfo”),那么在ASP.NET MVC框架内部是如何提供针对这四种不同编程方式的支持的呢?接下来我们就来聊聊这背后的故事。 一、ModelValidator与ModelValidatorProvider 虽然Model绑定的方式因被验证数据类型的差
ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所以它可以采用不同的寄宿方式运行于不同的应用程序中。如果采用Web Host的方式将定义Web API寄宿于一个Web应用之中,其实最终的URL路由还是通过ASP.NET本身的路由系统完成的,那么两个路由系统之间是如何衔接在一起的呢?。 目录 一、HostedHttpRoute 二、HttpWebRoute
对于ASP.NET MVC基于标注特性的Model验证,很多人只知道应用在数据类型及其属性上用于定义验证规则和错误消息的ValidationAttribute。通过《ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator》的介绍,我们知道了最终用于进行Model验证的是一个叫做ModelValidator的组件。ValidationAttribute对应的ModelValidator为DataAnnotationsModelValidator,这篇简短
从ASP.NET 2.0开始最大请求正文大小限制为30MB (+28.6 MiB)。在正常情况下,无需增加 HTTP 请求 body 的大小。但是,当您尝试上传大型文件 (> 30MB) 时,需要增加默认允许的最大限制。在这篇简短的文章中,我们将了解如何在.netcore 应用程序中增加文件 ASP.NET 大小以及控制此限制的各种选项。
通过《EnableCorsAttribute特性背后的故事》我们知道:由CorsPolicyProvider提供的CorsPolicy表示目标Action采用的资源授权策略,ASP.NET Web API最终需要利用它对具体的跨域资源请求实施授权检验并生成相应的CORS响应报头。在ASP.NET Web API的应用编程接口中,资源授权检验的结果通过类型CorsResult来表示。 一、CorsResult CorsResult定义在命名空间“System.Web.Cors”下,表示资源提供者针对具体跨域资
虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集System.Web.Http.dll中)已经移除了对System.Web.dll程序集的依赖,实现在ASP.NET Web API框架中的URL路由系统亦是如此。也就是说,ASP.NET Web API核心框架的URL路由系统与ASP.NET本身的路由系统是相对独立的。但是当我们采用基于Web Host的方式(定义在程序集System.Web.Http.We
到目前为止,ASP.NET Core提供了两种不同的路由解决方案。传统的路由系统以IRouter对象为核心,我们姑且将其称为IRouter路由。本章介绍的是最早发布于ASP.NET Core 2.2中的新路由系统,由于它采用基于终结点映射的策略,所以我们将其称为终结点路由。终结点路由自然以终结点为核心,所以先介绍终结点在路由系统中的表现形式。[更多关于ASP.NET Core的文章请点这里]
ASP.NET Core由于其更整洁、更轻的架构和跨平台的支持而开始流行于开发web应用程序。还有很多这样的ASP.NET Core应用程序是高流量的,并且在负载均衡的多服务器部署中运行。事实上,经常看到10-20个服务器集群,而一些比这个数量大得多的服务器也集群是很常见的。 拥有多服务器负载均衡部署使您的应用程序级别非常具有伸缩性,因为随着事务负载的增加,您可以添加更多的服务器。这让你的ASP.NET Core应用程序可以轻松处理非常大的数据负载。但是,这里仍然存在一个性能瓶颈,这会严重影响ASP.NET
旨在为目标Action方法的执行绑定输入参数的Model绑定过程伴随着对Model的验证。借助相应的验证特性,我们可以直接以声明的方式在Model类型上定义验证规则,这些规则将会作为Model元数据的一部分。具体在Model绑定过程中,ModelBinder通过ValueProvider为Model对象的某个属性提供相应属性值之后,会根据定义在基于该属性的Model元数据的验证规则实施验证。ASP.NET MVC的整个Model验证系统以组件ModelValidator为核心,或者说Model对象的验证最终
Model绑定是为作为目标Action的方法准备参数列表的过程,所以针对参数的描述才是Model绑定的核心。在ASP.NET MVC应用编程接口中,服务于Model绑定的参数元数据通过ParameterDescriptor类型来表示,而ActionDescriptor的GetParameters方法返回的就是一个ParameterDescriptor数组。 如下面的代码片断所示,ParameterDescriptor同样实现了ICustomAttributeProvider接口提供应用在相应参数上的特性。P
ASP.NET的缓存机制相比ASP有很大的改进,本文档除对常用优化方法进行总结介绍外,强调了如何使数据库
在一个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路由机制来实现的。 一、Ro
Contronoller激活之后,ASP.NET MVC会根据当前请求上下文得到目标Action的名称,然后解析出对应的方法并执行之。在整个Action方法的执行过程中,Model元数据的解析是一个非常重要的环节。ASP.NET MVC中的Model实际上View Model,表示最终绑定到View上的数据,而Model元数据描述了Model的数据结构,以及Model的每个数据成员的一些特性。正是有了Model元数据的存在,才使模板化HTML的呈现机制成为可能。此外,Model元数据支撑了ASP.NET M
本系列主要翻译自《ASP.NET MVC Interview Questions and Answers 》- By Shailendra Chauhan,想看英文原版的可访问http://www.dotnettricks.com/free-ebooks自行下载。该书主要分为两部分,ASP.NET MVC 5、ASP.NET WEB API2。本书最大的特点是以面试问答的形式进行展开。通读此书,会帮助你对ASP.NET MVC有更深层次的理解。 由于个人技术水平和英文水平也是有限的,因此错误在所难免,希
1. 引言 对于ASP.NET Core应用程序来说,我们要记住非常重要的一点是:其本质上是一个独立的控制台应用,它并不是必需在IIS内部托管且并不需要IIS来启动运行(而这正是ASP.NET Core跨平台的基石)。ASP.NET Core应用程序拥有一个内置的Self-Hosted(自托管)的Web Server(Web服务器),用来处理外部请求。 不管是托管还是自托管,都离不开Host(宿主)。在ASP.NET Core应用中通过配置并启动一个Host来完成应用程序的启动和其生命周期的管理(如下图所示
在本系列的最后一篇,我们来讨论最后三个ActionResult:HttpStatusCodeResult、RedirectResult和RedirectToRouteResult 。第一个用于实现针对
FileResult是一个基于文件的ActionResult,利用FileResult我们可以很容易地将从某个物理文件的内容响应给客户端。ASP.NET MVC定义了三个具体的FileResult,分
使用ASP.NET中的代码绑定技术来使得代码重用变得简单可行。我们发现,利用代码绑定技术我们可以容易的将我们的代码和内容分离开来,利用它可以建立可重用的代码,只是这种技术本身也存在着一些局限性。在本文中,我们将会一同探讨另外一种新的ASP.NET技术:用户控件。 什么是用户控件(User Controls)? 为了能更好的理解用户控件的重要性,我们先来看看一段小小的“历史”。在以前的ASP当中,可重用的技术实现选择是相当受限制的。许多的开发者一般都是借助将公共的常用的子过程放到那些包含文件当中的做法来实现一定的所谓代码重用的。比如,如我们想要在许多的ASP页面当中现实一个下拉列表框,我会在一个包含文件当中建立一个函数,样子如下所示: Function GetListBox(asSelectedItem) '为HTML的选择控件建立字符串 '返回这个字符串 End Function 当然,这样的做法的确在一定程度上做到了重用,但是为了能做到更加通用性,你不得不要增加更多的参数。为了使得类似上面的你需要整理的代码得以正常工作是困难的,因为要达到提供它的通用性(可重用性),你大概不得不去修改这些已经存在的代码,以便使得他们也能在新的环境下正常工作。 IIS5中的VBScript5.0增加了建立类的功能。这就使得我们可以通过一个较多面向对象的方式来实现可重用的代码。 Class ComboBox Property Let ControlName(vData) . End Property <More properties and methods here> End Class 这样做会稍微好一些,但是开发者仍旧需要被迫去编写那些函数,以便返回HTML代码。而且,他也没有能力操纵那些类的实例对象的事件。为了能做到操作事件,开发者不得不建立一些COM组件,而后者则增加了应用程序的额外的复杂度。 有了ASP.NET,我们拥有了一个新的简单的工具来编写可重用的代码—用户控件。用户控件(也叫pagelets)提供了这样一种机制,他使得我们可以建立能够非常容易的被ASP.NET页面使用或者重新利用的代码部件。一个用户控件也是一个简单的ASP.NET页面,不过它可以被另外一个ASP.NET页面包含进去。在你的ASP.NET应用程序当中使用用户控件的一个主要的优点是用户控件的支持一个完全面向对象的模式,使得你有能力去捕获事件。而且,用户控件支持你使用一种语言编写ASP.NET页面其中的一部分代码,而使用另外的一种语言编写ASP.NET页面另外一部分代码,因为每一个用户控件可以使用和主页面不同的语言来编写。 建立一个用户控件 在建立你自己的用户控件之前,你也许想知道在你的web页面中哪些可见的对象是能够重用的好的候选者。能可能的是,你将会在你的站点上的不止一个页面上需要使用融合的用户控件。一旦你开始不断的思考你的控件的结构,你就已经做好的开始的准备。在我们的例子当中,我们将要建立一个简单的搜索的控件,用来搜索SQL Server2000中的数据库Northwind。我们的搜索控件可以使得开发者快速的为一个web页面增加搜索能力。 建立用户控件的第一步是建立一个.ascx文件。这是用户控件需要的文件扩展名。在一个一个.ascx文件中不能包含head,form,或者body标签,因为包含此.ascx文件的.aspx文件已经包含了这些标签。一个.ascx文件只能包含方法,函数,以及和用户控件相关的内同。 在建立一个.ascx文件之后,我们想要为用户控件增加一些可视的代码。在一个用户控件当中可以包含所有的web控件。在我们的例子当中,搜索控件需要拥有一个标签,一个文本框以及一个按钮。我们首先加入这些web控件,因为我们的整个代码当中会涉及到这些对象。下面是具体的代码: <asp:Label id=lblSearch runat="server" text="Caption"></asp:Label> <asp:TextBox id=txtSearch runat="server"></asp:TextBox> <asp:Button id=cmdSearch runat="server" Text="Search" ></asp:Button> 在用户控件中有一件很酷的事情是,你可以定义你自己的属性。在我们的例子当中,我们会定义如下属性: 。LabelText—描述显示给用户的搜索条件 。ConnectiongString---用来联接到数据库的连接字符串 。ResultSetView—包含了搜索结果的数据记录集 。
摘要:ASP.NET为保持用户请求之间的数据提供了多种不同的途径。你可以使用Application对象、cookie、hidden fields、Sessions或Cache对象,以及它们的大量的方法。决定什么时候使用它们有时很困难。本文将介绍了上述的技术,给出了什么时候使用它们的一些指导。尽管这些技术中有些在传统ASP中已经存在,但是有了.NET框架组件后该在什么时候使用它们发生了变化。为了在ASP.NET中保持数据,你需要调整从先前的ASP中处理状态中学习到的知识。
在采用Windows认证的情况下,使用基于Windows用户组安全主体权限模式是一个不错的选择。我们可以直接使用现有的用户组设置,也可以为相应的应用或服务创建单独的用户组。但是,由于该模式对Windows认证的依赖,意味着这种模式只能使用于局域网环境中。如果采用证书和Windows帐号的映射,也可以适用于像B2B这样的外部网环境。在其他的网络环境中,基于Windows用户组的授权方式将会无能为力。此外,还具有这样一种状况:即使是在同一个局域网环境中,并且也采用Windows进行客户端认证,但是我们不想创建太
ASP.NET Core通过IInputFormatter来解析输入的数据,并进行模型绑定(Model Binding);通过IOutputFormatter来解析输出的数据,来格式化响应(format response)。
ASP.NET Core的核心是通过一个Server和若干注册的Middleware构成的管道,不论是管道自身的构建,还是Server和Middleware自身的实现,以及构建在这个管道的应用,都需要相应的服务提供支持,ASP.NET Core自身提供了一个DI容器来实现针对服务的注册和消费。换句话说,不只是ASP.NET Core底层框架使用的服务是由这个DI容器来注册和提供,应用级别的服务的注册和提供也需要以来这个DI容器,所以正如本文标题所说的——学习ASP.NET Core,你必须了解无处不在的“依
本文来自Microsoft Docs官方文档,提供了ASP.NET Core性能最佳做法的准则。
上周我写了三篇文章(一、二、三)详细地介绍了ASP.NET的路由系统。ASP.NET的路由系统旨在通过注册URL模板与物理文件之间的映射进而实现请求地址与文件路径之间的分离,但是对于ASP.NET MVC应用来说,请求的目标不再是一个具体的物理文件,而是定义在某个Controller类型中的Action方法。出于自身路由特点的需要,ASP.NET对ASP.NET的路由系统进行了相应的扩展。 目录 一、基本路由映射 二、实例演示:注册路由映射与查看路由信息 三、基于A
在ASP.NET Model绑定系统中,用于提供数据值的ValueProvider对象通过ValueProviderFactory来创建。在ASP.NET MVC应用编程接口中,ValueProviderFactory继承自ValueProviderFactory类。本篇文章只要介绍基于ValueProviderFactory的ValueProvider的提供机制,以及如何通过自定义ValueProviderFactory实现我们需要的数据值的绑定方式。[本文已经同步到《How ASP.NET MVC Wo
在前面的四篇文章中,我们介绍了各种ActionResult以及相关的请求响应机制,但是与“View的呈现”相关的ActionResult是ViewResult。通过ViewResult的执行实现的对V
我们将整个ASP.NET MVC框架划分为若干个子系统,那么针对请求上下文激活目标Controller对象的子系统被我们成为Controller激活系统。在正式讨论Controller对象具体是如何被创建爱之前,我们先来看看Controller激活系统在ASP.NET MVC中的总体设计,了解一下组成该子系统的一些基本的组件,以及它们对应的接口或者抽象类是什么。 目录 一、Controller 二、 ControllerFactory 三、ControllerBuilder 实例演示:如何提
ASP.NET Web API的核心框架是一个消息处理管道,这个管道是一组HttpMessageHandler的有序组合。这是一个双工管道,请求消息从一端流入并依次经过所有HttpMessageHandler的处理。在另一端,目标HttpController被激活,Action方法被执行,响应消息随之被生成。响应消息逆向流入此管道,同样会经过逐个HttpMessageHandler的处理。这是一个独立于寄宿环境的抽象管道,如何实现对请求的监听与接收,以及将接收的请求传入消息处理管道进行处理并将管道生成的响应
...然后就碰到问题了... 我发现..cookie竟然存不进去了..(怨念+100)
应用程序池xxxx已启用 32 位工作进程,但未找到 SysWOW64 支持。Windows Process Activation Service (WAS)将禁用此应用程序池。要解决此问题,请禁用以 32 位工作进程运行,或者请安装 SysWOW64 支持。
[上篇]除了通过自定义ControllerFactory的方式引入IoC之外,在使用默认DefaultControllerFactory情况下也可以通过一些扩展使基于IoC的Controller激活成为可能。主要的方式就是自定义ControllerActivator和 DependencyResolver。 四、ControllerActivator V.S. DependencyResolver 如下面的代码片断所示,DefaultControllerFactory具有两个构造函数重载,其中一个具有一个类
在之前的文章中,我为大家介绍了OWIN和Katana,有了对它们的基本了解后,才能更好的去学习ASP.NET Identity,因为它已经对OWIN 有了良好的集成。 在这篇文章中,我主要关注ASP.NET Identity的建立和使用,包括基础类的搭建和用户管理功能的实现—— 点此进行预览 点此下载示例代码 在后续文章中,我将探索它更高级的用法,比如身份验证并联合ASP.NET MVC 进行授权、使用第三方登录、声明式认证等。 ASP.NET Identity 前世今生 ASP.NET Me
虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是ASP.NET Web API框架本身只要求它实现IHttpController接口即可,所以我们将其统称为HttpController。既然HttpController指的是所有实现了IHttpController接口的类型,我们自然得先来了解一下这个接口的定义。如下面的代码片断所示,在IHttpController接口中仅仅定义了唯一的方法Exec
前面篇文章我们分别介绍用真正用于实施Model验证的ModelValidator(《ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator》),以及用于提供ModelValidator的ModelValidatorProvider(《ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProvider》),那么对于ASP.NET MVC的Model验证体系来说,最终是通过怎样的方式对ModelV
ASP.NET Core 提供以下 3 种方法来使用依赖项注入容器注册服务。我们使用的方法决定了注册服务的生命周期。
Razor Engine,之前仅仅是ASP.NET MVC的一种View引擎,目前已经完全成为一种可以独立使用的模版引擎,并且已经成为了CodePlex上一个开源的项目(http://razorengine.codeplex.com/)。对于使用过ASP.NET MVC Razor视图引擎的朋友们一定已经领略过它的灵活性和易用性,在这篇文章中我们将利用它来实现一个代码生成器使我们可以以Razor的语法来定义代码模版。[源代码从这里下载] 在《一个简易版的T4代码生成"框架"》这篇文章中,我创建了一个能够
基于IHostBuilder/IHost的承载系统通过IHostEnvironment接口表示承载环境,我们利用它不仅可以得到当前部署环境的名称,还可以获知当前应用的名称和存放内容文件的根目录路径。对于一个Web应用来说,我们需要更多的承载环境信息,额外的信息定义在IWebHostEnvironment接口中。[本文节选自《ASP.NET Core 3框架揭秘》第11章, 更多关于ASP.NET Core的文章请点这里]
今天这篇文章我们来聊一聊如何提升并优化ASP.NET Core应用程序的性能,本文的大部分内容来自翻译,当然中间穿插着自己的理解,希望对大家有所帮助!话不多说开始今天的主题吧! 我们都知道性能是公共网站取得成功的关键因素之一。如果一个网站的响应时间超过3秒,那么用户通常不会再此光顾(此网站)。谷歌,Bing,百度以及其他搜索引擎也更倾向于推荐优化后的,移动友好的以及响应速度更快的网站。
MVC经过其1.0和2.0版本的发展,现在已经到了3.0的领军时代,随着技术的不断改进,MVC也越来越成熟。使开发也变得简洁人性化艺术化。
在《ASP.NET MVC的Razor引擎:RazorView》介绍BuildManagerCompiledView的时候,我们谈到默认使用的ViewPageActivator使用当前注册的Depen
ASP.NET MVC的URL路由系统通过注册的路由表对HTTP请求进行解析从而得到一个用于封装路由数据的RouteData对象,而这个过程是通过自定义的UrlRoutingModule对HttpApplication的PostResolveRequestCache事件进行注册实现的。RouteData中已经包含了目标Controller的名称,现在我们来进一步分析真正的Controller对象是如何被激活的。我们首先需要了解一个类型为MvcRouteHandler的类型。 一、MvcRouteHandle
https://www.cnblogs.com/shanyou/p/17858385.html
通过《服务承载系统[2]: 承载长时间运行的服务[下篇]》的介绍可知,IHostBuilder接口中定义了ConfigureHostConfiguration方法和ConfigureAppConfiguration方法,它们可以帮助我们设置面向宿主(IHost对象)和应用(承载服务)的配置。针对配置的初始化也可以借助IWebHostBuilder接口来完成。[本文节选自《ASP.NET Core 3框架揭秘》第11章, 更多关于ASP.NET Core的文章请点这里]
通过命名空间来分类,区别不同的代码功能,也是ASP.NET中所有类的完全名称的一部分。
这样做的好处就是可以节省硬盘空间,也利于复用等等。因为Docker基于镜像创建容器的时候,其镜像是共享的;而且镜像里面的层如果已存在,也无需再下载。
当我们所有的环境和依赖安装完成后,我们通过创建一个简单的控制台应用程序来验证我们的.NET Core 版本是否正确。
在ActionInvoker对Action的执行过程中,除了通过利用ActionDescriptor对Action方法的执行,以及之前进行的Model绑定与验证之外,还具有一个重要的工作,那就是对相关筛选器(Filter)的执行。ASP.NET MVC的筛选器是一种基于AOP(面向方面编程)的设计,我们将一些非业务的逻辑实现在相应的筛选器中,然后以一种横切(Crosscutting)的方式应用到对应的Action方法。当Action方法执行前后,这些筛选器会自动执行。ASP.NET MVC提供了四种类型的筛
让ASP.NET Web API支持JSONP和W3C的CORS规范是解决“跨域资源共享”的两种途径,在《通过扩展让ASP.NET Web API支持JSONP》中我们实现了前者,并且在《W3C的CORS Specification》一文中我们对W3C的CORS规范进行了详细介绍,现在我们通过一个具体的实例来演示如何利用ASP.NET Web API具有的扩展点来实现针对CORS的支持。 目录 一、ActionFilter OR HttpMessageHandler 二、用于定义
领取专属 10元无门槛券
手把手带您无忧上云