ASP.NET Core最初提供了一个以IWebHostBuilder/IWebHost为核心的承载系统,其目的很单纯,就是通过下图所示的形式承载以服务器和中间件管道构建的Web应用。...ASP.NET Core 3依然支持这样的应用承载方式,但是本系列不会涉及这种“过时”的承载方式。 ?...除了承载Web应用本身,我们还有针对后台服务的承载需求,为此微软推出了以IHostBuilder/IHost为核心的承载系统,我们在《服务承载系统》中已经对该系统做了详细的介绍。...,虽然这样可以最大限度地复用和兼容定义在IWebHostBuilder接口上众多的应用编程接口,但笔者并不喜欢这样略显混乱的编程模式,这一点在下一个版本中也许会得到改变。...由服务器和中间件组成的请求处理管道如下图所示。 ? 建立在ASP.NET Core之上的应用基本上是根据某个框架开发的。一般来说,开发框架本身就是通过某一个或者多个中间件构建起来的。
目录 一、条件请求 HTTP条件请求 针对静态文件的条件请求 二、 区间请求 HTTP区间请求 针对静态文件的区间请求 一、条件请求 所谓的条件请求就是客户端在发送GET...服务端处理器在接受到这样的请求之后,会提取这些条件并验证目标资源的当前的状态是否满足客户端指定的条件。在有在这些条件满足的情况下,目标资源的内容才会真正响应给客户端。...假设我们在ASP.NET Core应用中发布一个文本文件(foobar.txt),内容为“abcdefghijklmnopqrstuvwxyz0123456789”(26个字母+10个数字),目标地址为...区间请求在某些时候也会去验证资源内容是否发生改变。在这种情况下,请求会利用一个名为If-Range的报头携带一个基础时间戳或者整个资源(不是当前请求的区间)的签名。...Nov 2016 15:27:00 GMT 7: Content-Length: 0 8: Server: Kestrel 9: Content-Range: bytes */39 为了验证区间请求针对文件更新状态的检验
前面篇文章我们分别介绍用真正用于实施Model验证的ModelValidator(《ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator》),以及用于提供...ModelValidator的ModelValidatorProvider(《ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProvider...这样的输出结果至少反映了两个问题,其一,CompositeModelValidator对数据的验证并不是递归进行的,因为只有应用在Contact属性上的验证特性参与了验证,而应用在Address类型属性上的验证特性则没有被使用...1: N/A: Contact ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator ASP.NET MVC以ModelValidator为核心的...Model验证体系: ModelValidatorProvider ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidatorProviders
在《ASP.NET MVC以ModelValidator为核心的Model验证体系: ModelValidator》中我们介绍了ASP.NET MVC用于Model验证的四种ModelValidator...Model验证可以看成是Model绑定的后续环节,它对绑定的数据实施验证,所以Model验证也是一个递归的过程,它采用基于属性的验证规则对绑定的属性值实施验证。...PropertyDescriptor对象,最终通过该描述对象得到应用在对应属性上的所有特性并调用抽象方法GetValidators返回基于属性的ModelValidator列表。...在通过Visual Studio的ASP.NET MVC项目模板创建的空Web应用中我们定义了如下一个实现了IDataErrorInfo接口的Contact类型。...前者对Contact对象本身实施验证,并将Error属性作为验证结果的错误消息;后者针对应的属性实施验证,验证结果的错误消息来源于将属性名称作为索引的值。
ASP.NET MVC的整个Model验证系统以组件ModelValidator为核心,或者说Model对象的验证最终通过某个ModelValidator对象来完成,所以我们有必要先来认识一下ModelValidator...[本文已经同步到《How ASP.NET MVC Works?》...MVC应用编程接口中,所有的ModelValidator都直接或者间接地继承自抽象类型ModelValidator。...MVC的读者应该知道,我们可以通过数据类型的某个属性上应用相应的验证标注特性(比如RequiredAttribute、RangeAttribute和RegularExpressionAttribute...等)的方式来定义相应的验证规则,这是ASP.NET MVC 提供的默认Model验证方式。
总地来说,我们可以采用4种不同的编程模式来进行针对绑定参数的验证。...我们在一个ASP.NET MVC应用中定义了如下一个Person类作为被验证的数据类型,它的Name、Gender和Age三个属性分别表示一个人的姓名、性别和年龄。...另一个支持POST请求的Index方法具有一个Person类型的参数,我们在该Action方法中先调用Validate方法对这个输入参数实施验证。...实际上这也是ASP.NET MVC的Model验证系统默认支持的编程方式。...由于ASP.NET MVC会自动提取应用在绑定参数类型上的ValidationAttribute特性对绑定的参数实施自动化验证,所以我们根本不需要在具体的Action方法中来对参数作手工验证。
在《ASP.NET MVC下的四种验证编程方式》一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”、“标注ValidationAttribute特性”、“让数据类型实现IValidatableObject...或者IDataErrorInfo”),那么在ASP.NET MVC框架内部是如何提供针对这四种不同编程方式的支持的呢?...如右图所示的UML列出了组成Model验证系统的三个核心类型。...二、DataAnnotationsModelValidator 我们在《ASP.NET MVC下的四种验证编程方式》中介绍了三种不同的“自动化验证”的编程方式,ASP.NET MVC在内部会采用不同的ModelValidator...对于上面提到的这三种验证编程方式,第一种(利用应用在数据类型或其数据成员上的ValidationAttribute特性来定义相应的验证规则)是最为常用的。
对于一个Web应用来说,我们需要更多的承载环境信息,额外的信息定义在IWebHostEnvironment接口中。...[本文节选自《ASP.NET Core 3框架揭秘》第11章, 更多关于ASP.NET Core的文章请点这里] 目录 一、IWebHostEnvironment 二、通过配置定制承载环境 三、针对环境的编程...对于同一个ASP.NET Core应用来说,我们添加的服务注册、提供的配置和注册的中间件可能会因部署环境的不同而有所差异。...ASP.NET Core编程模式[1]:管道式的请求处理 ASP.NET Core编程模式[2]:依赖注入的运用 ASP.NET Core编程模式[3]:配置多种使用形式 ASP.NET Core编程模式...[4]:基于承载环境的编程 ASP.NET Core编程模式[5]:如何放置你的初始化代码
虽然我们可以将它们存储于资源文件中,并且ASP.NET的ValidationAttribute也对这种方式提供了原生的支持。...在这篇文章中将会通过扩展现有的ValidationAttribute特性让ASP.NET MVC应用可以使用我们的消息组件来获取验证消息。...ASP.NET MVC项目中的应用。...具体的验证规则是:名称是必需的,年龄必须大于18周岁而体重不得终于160斤。表示验证消息的ID和站位符对象数组作了相应的设置。...,如果输入的内容不符合定义在Person类型上的验证规则,相应的验证消息会被现实,而这些消息都是通过MessageManager来获取的。
在一个基于ASP.NET的Web应用程序中,我们通常使用SessionState保存基于某个客户端的状态信息。...为了实现对客户端状态的有效管理,并提高应用开发效率,在很多年前我们的开发框架体系中就具有相应的一个叫做State的编程框架。...五、通过代码生成机制帮助你以强类型的方式操作状态 一、单纯基于SessionState编程的局限性 SessionState对于ASP.NET的开发者在熟悉不过了,我们可以通过它来存储一些基于客户端的状态信息...这比较类似于ASP.NET中Profile的配置和强类型编程的方式; 提供状态的后备存储(Backing Storing)机制将低频率使用的大对象从SessionState中移到相应的后备存储(比如文件...二、通过状态后备存储机制解决Web Server内存的压力 状态的后备机制是整个状态编程框架的核心。通过对所有状态项的扫描,标记出所有需要进行后备存储的状态项。
我们通过《以Web的形式发布静态文件》和《条件请求与区间请求》中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为StaticFileMiddleware的中间进行了全面的介绍...Configuration对象,然后采用Options模式特有的编程模式实现与StaticFileOptions类型的映射。...这样的配置将会自动应用到注册的StaticFileMiddleware中间件上。...在此之前,中间件还会验证请求采用的方法,它支持GET和HEAD请求。...该方法会我们指定的响应状态码应用到指定的HttpContext,并设置相应的响应报头。
在这种情况下,您的应用程序将身份验证责任委托给基础 IIS。 Forms :将 ASP.NET 基于窗体的身份验证指定为默认身份验证模式。...接 口: (1) 接口不能被实例化 (2) 接口只能包含方法声明 (3) 接口的成员包括方法、属性、索引器、事件 (4) 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员...MVC 编程模式MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式: Model(模型)表示应用程序核心(比如数据库记录列表)...,因为它占用的是的ASP.NET 线程池中的工作线程,这将直接影响Web服务器响应其它请求的能力。...authentication身份验证,此节设置应用程序的身份验证策略 authorization授权, 此节设置应用程序的授权策略.
ASP.NET MVC默认采用基于标准特性的Model验证机制,但是只有应用在Model类型及其属性上的ValidationAttribute才有效。...到目前为止,我们对ASP.NET MVC的可扩展的Model验证系统已经有了一个全面的了解,现在我们通过对它进行相应的扩展使直接应用到参数上的验证特性能够生效。...为了验证它们是否能够最终实现我们期望的验证效果,我们将它们应用到一个简单的ASP.NET MVC应用中。...ASP.NET MVC基于标注特性的Model验证:ValidationAttribute ASP.NET MVC基于标注特性的Model验证:DataAnnotationsModelValidator...应用到参数上 ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则
虽然ASP.NET Core是一款“动态”的Web服务端框架,但是在很多情况下都需要处理针对静态文件的请求,最为常见的就是这对JavaScript脚本文件、CSS样式文件和图片文件的请求。...针对不同格式的静态文件请求的处理,ASP.NET Core为我们提供了三个中间件,它们将是本系列文章论述的重点。...不过在针对对它们展开介绍之前,我们照理通过一些简单的实例来体验一下如何在一个ASP.NET Core应用中发布静态文件。...ASP.NET Core控制台应用,它具有如下图所示的项目结构。...我们知道ASP.NET Core应用大部分情况下都是利用一个FileProvider对象来读取文件的,它在处理针对静态文件的请求是也不例外。
从编程的角度来讲,ASP.NET Web API针对CORS的实现仅仅涉及到HttpConfiguration的扩展方法EnableCors和EnableCorsAttribute特性。...ASP.NET Web API最终会利用这些策略对请求(包括预检请求)进行解析并生成相应的CORS响应报头。...在ASP.NET Web API的应用编程接口中,CORS授权策略通过CorsPolicy类型表示。...Web API的应用编程接口中,围绕着这6个CORS响应报头的授权策略通过类型System.Web.Cors.CorsPolicy来表示。...关于针对目标Action的选择问题,有一个核心的核心的细节值得关注:如果当前请求并非真正的跨域资源请求,而仅仅是一个采用“OPTIONS”作为HTTP方法的预检请求(Preflight Request)
Model绑定是为作为目标Action的方法准备参数列表的过程,所以针对参数的描述才是Model绑定的核心。...在ASP.NET MVC应用编程接口中,服务于Model绑定的参数元数据通过ParameterDescriptor类型来表示,而ActionDescriptor的GetParameters方法返回的就是一个...在默认情况下,请求数据与参数之间严格按照名称进行绑定,但是有时候请求数据名称具有相应的前缀,这个前缀体现在ParameterBindingInfo的Prefix属性上。...该BindingInfo的Include、Exclude和Prefix属性来源于对应用在参数上的BindAttribute特性的解析。...ASP.NET MVC三个重要的描述对象:ControllerDescriptor ASP.NET MVC三个重要的描述对象:ActionDescriptor ASP.NET MVC三个重要的描述对象
如果需要创建一个APM(Application Performance Management)系统来监控ASP.NET Core应用处理请求的性能及出现的异常,我们完全可以将HostingApplication...(本篇提供的实例已经汇总到《ASP.NET Core 6框架揭秘-实例演示版》) [S1701]ASP.NET针对请求的诊断日志(源代码) [S1702]收集DiagnosticSource输出的日志...(源代码) [S1703]收集EventSource输出的日志(源代码) [S1701]ASP.NET针对请求的诊断日志 为了确定什么样的信息会被作为诊断日志记录下来,我们通过一个简单的实例演示将HostingApplication...同一连接的多次请求将一个自增的序列号(“00000002”和“00000003”)作为唯一标识。...这个EventSource对象来回在在启动和关闭应用程序时发出相应的事件。涉及的五个日志事件对应的名称如下: 启动应用程序:HostStart。 开始处理请求:RequestStart。
在ASP.NET Web API的应用编程接口中,资源授权检验的结果通过类型CorsResult来表示。...二、CorsRequestContext 针对CORS的支持其实并不限于仅被使用在ASP.NET Web API上,用于根据提供的资源授权策略对跨域资源请求进行授权检验得引擎定义在程序集System.Web.Cors.dll...对于ASP.NET Web API来说,CORS资源授权检验实施的目标是表示当请求的HttpRequestMessage对象,这个对象自然不可能使用在ASP.NET的核心CORS引擎中。...三、CorsEngine 我们说ASP.NET 的核心CORS引擎定义在程序集System.Web.Cors.dll中,它主要体验为这个名为CorsEngine的对象,其主要的使命在于:根据提供的资源授权策略...[6] ASP.NET Web API自身对CORS的支持: CORS授权策略的定义和提供 [7] ASP.NET Web API自身对CORS的支持: CORS授权检验的实施 [8] ASP.NET
一个ASP.NET Core应用被启动之后就具有了针对请求的处理能力,而这个能力是由管道赋予的,所以应用的启动同时意味着管道的成功构建。...由于管道是由注册的服务器和若干中间件构成的,所以应用启动过程中一个核心的工作就是完成中间节的注册。...由于依赖注入在ASP.NET Core应用这得到非常广泛的应用,框架绝大部分的工作都会分配给我们预先注册的服务,所以服务注册也是启动WebHost过程的另一项核心工作。...ASP.NET Core应用。...当应用启动之后,我们利用浏览器请求应用监听地址(“http://localhost:5000”),这个被选择的启动程序的名称将会以如下的形式直接显示出来。 ?
ASP.NET MVC应用的请求都是针对某个Controller的某个Action方法,所以对请求的处理最终体现在对目标Action方法的执行。...在ASP.NET MVC应用编程接口中,Action方法某个参数的元数据通过ParameterDescriptor表示,而两个相关的类型ControllerDescriptor和ActionDescriptor...二、ReflectedControllerDescriptor 在ASP.NET MVC应用编程接口中定义了抽象类ControllerDescriptor的唯一继承类型ReflectedControllerDescriptor...,在ASP.NET MVC应用编程接口中具有一个类型为ActionNameAttribute的继承者。...也就是说对于每一次请求,要求有且只有一个匹配的Action方法。
领取专属 10元无门槛券
手把手带您无忧上云