DbContext从哪来 1、 直接开溜new 回归原始,既然要创建实例,没有比直接new一个更好的办法了,在Framework中没有DI的时候也差不多都这么干。...那有没有办法不传这个参数?肯定也是有的。...2、 从DI容器手动获取 既然前面已经在启动类中注册了上下文,那么从DI容器中获取实例肯定是没问题的。...这里有个核心点要注意的是,从DI容器获取实例的时候一定要保证是和当前请求是同一个Scope,也就是说,必须要从当前的HttpContext中拿到这个IServiceProvider。...于是想有没有办法在控制器被激活的时候做一些操作?没考虑引入AOP框架,感觉为了这一个功能引入AOP有点重。
HttpContext { get; } public Exception Exception { get; } public ErrorContext(HttpContext httpContext...二、显示编译异常信息 我们编写的ASP.NET Core应用会先编译成程序集,然后部署并启动执行,为什么运行过程中还会出现“编译异常”?...从ASP.NET Core应用层面来说,如果采用预编译模式,也就是说我们部署的不是源代码而是编译好的程序集,运行过程中根本就不存在编译异常的说法。...但是在一个ASP.NET Core MVC应用中,视图文件(.cshtml)是支持动态运行时编译(Runtime Compilation)的。...如下所示的代码片段只保留了DeveloperExceptionPageMiddleware类型的核心代码,我们可以看到它的构造函数中注入了用来提供配置选项的IOptions<DeveloperExceptionPage
在本文中,我将展示如何向Serilog的摘要请求日志中添加其他元数据,例如请求的主机名,响应的内容类型或从ASP.NET Core 3.0中使用的终结点路由中间件所选择的端点名称。...在IDiagnosticContext中设置扩展值 Serilog.AspNetCore会将接口IDiagnosticContext作为单例添加到DI容器中,因此您可以从任何类中访问它。...下面的静态帮助器类从当前HttpContext上下文检索值,并在值可用时对其进行设置。 下面的静态helper类从当前HttpContext检索值,并在值可用时设置它们。...Request”,“Response”以及其他中间件(端点名称)设置的功能中检索值。...这样的做法非常简单-您可以访问HttpContext,因此你可以检索它包含的任何可用的值,并将它们设置为IDiagnosticContext所提供的属性。
中的节点路由 Part 5 - 将集成测试的转换为 NET Core 3.0 在本篇博客中,我将描述与之前版本相比,ASP.NET Core 3.0 中已经被标记为废弃的类型。...当你从 ASP.NET Core 2.x 升级到 3.0, ASP.NET Core 3.0 并不强迫你立即使用新的通用主机。...如果你正在编写一个在通用主机和.NET Core 3.0 项目中使用的类库 使用IHostEnvironment接口。你的类库依然可以在 ASP.NET Core 3.0 应用中可用。...如果你正在编写一个在 ASP.NET Core 3.0 应用中使用的类库 和之前一样,尽量使用IHostEnvironment接口,因为你的类库可能不仅使用在 ASP.NET Core 应用中,还有可能使用在其他通用主机应用中...AspNetCore命名空间中唯一的实现是一个简单的封装类,类型将实现委托给了一个作为通用主机部分被添加的ApplicationLifetime对象中。
文件服务器中的每一个目录都对应着一个URL,客户端可以指定相应的URL将某一个目录作为本地文件系统的根。...HttpFileProvider 三、FileProviderMiddleware 四、远程文件系统的应用 一、HttpFileInfo与HttpDirectoryContents 在以HttpFileProvider为核心的文件系统中...29: } 30: } 31: 32: private Func CreatePhysicalPathResolver(HttpContext...,我们可以利用前者创建一个ASP.NET Core应用来作为文件服务器,客户端则利用后者在本地建立一个虚拟的文件系统。...我们首先创建一个控制台应用来承载作为文件服务器的ASP.NET Core应用。在添加必要NuGet包依赖之后,我们只需要编写如下几行简单程序即可。
WebRootPath属性表示用于存放Web资源文件根目录的路径,WebRootFileProvider属性则返回该路径对应的IFileProvider对象。...当我们编译发布一个ASP.NET Core项目时,项目的源代码文件会被编译成二进制并打包到相应的程序集中,而另外一些文件(如JavaScript、CSS和表示View的.cshtml文件等)会复制到目标目录中...如果记不住这些配置项的名称也没有关系,因为我们可以利用定义在静态类WebHostDefaults中如下所示的4个只读属性来得到它们的值。...注册中间件的前提条件可以通过一个Func对象来表示,对于某个具体的请求来说,只有对应的HttpContext对象满足该对象设置的断言,指定的中间件注册操作才会生效。...ASP.NET Core编程模式[1]:管道式的请求处理 ASP.NET Core编程模式[2]:依赖注入的运用 ASP.NET Core编程模式[3]:配置多种使用形式 ASP.NET Core编程模式
在《ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式》中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将对这三个中间件进行详细介绍...1: public class DeveloperExceptionPageOptions 2: { 3: public IFileProvider FileProvider...compilationException) ; 29: } 一、 处理编译异常 我想很多人会很疑惑:我们编写一个ASP.NET Core应用应该是先编译成程序集,然后再部署并启动执行,为什么运行过程中还会出现...从ASP.NET Core应用层面来说,我们采用的是“预编译”,也就说我们部署的不是源代码而是编译好的程序集,所以运行过程中根本就不存在“编译异常”一说。...但是不要忘了在一个ASP.NET Core MVC应用中,视图文件(.cshtml)是支持“动态编译”的。也就是说我们可以直接部署视图源文件,应用在执行过程中是可以动态地编译它们的。
一、ASP.NET MVC核心机制回顾 在ASP.NET MVC中,最核心的当属“路由系统”,而路由系统的核心则源于一个强大的System.Web.Routing.dll组件。 ? ...在这个System.Web.Routing.dll中,有一个最重要的类叫做UrlRoutingModule,它是一个实现了IHttpModule接口的类,在请求处理管道中专门针对ASP.NET MVC请求进行处理...在ASP.NET MVC的实现中,是将请求交给了MvcHandler这个类,通过执行其ProcessRequest方法来进行后续的处理。 ? ...在以往的ASP.NET MVC开发中,我们在Action方法的编写中,总会看到它们的返回类型都是以ActionResult为基类的各种Result类型。...因此,这个文件夹中只有一个VelocityHelper类(我直接从网上搜索的),该类可以帮助我们找到指定的HTML并绑定Model实体。
ToString()), new Claim("maxAge",_authData.Data["maxAge"].ToString()), }; // 设置身份卡片内容 、身份卡片核心...bool IsAuthenticated => Id.HasValue; ..... } ③ ICurrentUser修改了UserName的取值逻辑 Asp.NetCore检索声明信息中...ClaimType==某个NameClaimType的Claim值, 作为身份认证卡片Identity的Name, 更灵活 Abp 检索声明信息中ClaimType=="http://schemas.xmlsoap.org...控制器类,使用新User类 ?...new关键字显式隐藏从基类继承的成员 这样我们既可以使用 Abp框架其他能力,利用new关键词我们也刻意隐藏了框架原有的ICurrentUser属性, 其他同事也不需要额外的认知成本就可以开心地像往常一样使用
而透彻了解底层原理,最好的笨办法就是根据原理对框架核心进行重建或者说再造。看起来没有捷径,也是最快的捷径。...Request(输入)和Response(输出),所以HttpContext包含这两个核心的东西。 ...老A建议大家从管道的角度来理解该对象的作用,管道和HTTP请求流程一脉相承。在Server接收到请求后,HttpContext被创建。 在服务器和中间件,中间件之间通过什么来传递信息?...为什么这里要把HttpContext放在第一个来介绍,因为这是一个最基础的对象。这7大对象的讲解顺序,我感觉是从底层基础开始讲起,再层层往上,最后到WebHostBuilder。...2.RequestDelegate 这个委托太重要了,和HttpContext一样,老A建议大家从管道的角度来理解这个委托。
我们从HttpApplication说起。先看看微软官方是怎么定义HttpApplication的: 定义 ASP.NET 应用程序中的所有应用程序对象共有的方法、属性和事件。...里有这么一段话:HttpApplication 类的实例是在 ASP.NET 基础结构中创建的,而不是由用户直接创建的。...HttpApplication是整个ASP.NET基础架构的核心,负责处理分发给他的请求。HttpApplication处理请求的周期是一个复杂的过程,在整个过程中,不同阶段会触发相映的事件。...他们是从哪里开始分道扬镳的呢?我们猜想肯定就在这19个方法中。我们继续往下看。...在ASP.NET MVC中,最核心的当属“路由系统”,而路由系统的核心则源于一个强大的System.Web.Routing.dll组件。
所有的.NET应用程序都有可能会产生错误,并且不幸地引发异常,因此在ASP.NET中间件管道中处理这些异常显得非常重要。...这是从ASP.NET Core 3.x(在某种程度上在2.2版中)的Web API返回错误消息的普遍支持的方法。 我们将从在静态帮助器类中定义UseCustomErrors函数开始。...该帮助类将一个生成响应的中间件添加到IApplicationBuilder方法扩展中。在开发环境中,它最终会调用WriteResponse方法,并且设置includeDetails: true。...中检索的自己喜欢的任何其他值。...然后,我从官方文档中展示了建议的方法,该方法使用MVC控制器为API 生成ProblemDetails响应。
上面的实例演示(搭建文件服务器、条件请求以提升性能和区间请求以提供部分内容)从提供的功能和特性的角度对StaticFileMiddleware中间件进行了全面的介绍,下面从实现原理的角度对这个中间件进行全面解析...StaticFileOptions继承自如下所示的抽象类SharedOptionsBase。...基类SharedOptionsBase定义了请求路径与对应IFileProvider对象之间的映射关系(默认为PhysicalFileProvider)。...4个选项,Unspecified表示请求中不包含这4个报头。...我们将前两项工作实现在HttpContext如下所示的SetResponseHeaders扩展方法中。该方法不仅可以将指定的响应状态码应用到HttpContext上,还可以设置相应的响应报头。
长话短说:上文我们聊了 ASP.NET Core 基于声明的访问控制到底是什么鬼? 今天我们乘胜追击:聊一聊ASP.NET Core 中的身份验证。 身份验证是确定用户身份的过程。...直接通过ControllerBase基类中包含的HttpContext属性,获取User对象。...3.2 在服务中获取当前登录用户 这个时候,服务是作为请求处理中的一个环节,并没有直接可用的HttpContext。...ASP.NET Core 提供了IHttpContextAccessor能够注入此次请求中的HttpContext对象(依赖注入框架的作用)。...// 下面的用户实体类,需要获取当前登录用户,借助IHttpContextAccessor注入httpContext public class UserEntityService : IUserEntityService
对于每一个抵达的HTTP请求,ASP.NET MVC会遍历路由表找到一个URL模板的模式与请求地址相匹配的路有对象,并最终解析出以Controller和Action名称为核心的路由数据。...在我们自定义的ASP.NET MVC框架中,路由数据通过具有如下定义的RouteData类型表示。...我们之前已经提到过ASP.NET MVC本质上是两个自定义的ASP.NET组件来实现的,一个是自定义的HttpModule,另一个是自定义的HttpHandler,而后者从RouteData的RouteHandler...顾名思义,RequestContext表示当前(HTTP)请求的上下文,其核心就是对当前HttpContext和RouteData的封装,这可以通过如下的代码片断看出来。...在我们自定义ASP.NET MVC框架中,路由表通过类型RouteTable表示。
开篇:上一篇我们了解了一个请求从客户端发出到服务端接收并转到ASP.Net处理入口的过程,这篇我们开始探索ASP.Net的核心处理部分,借助强大的反编译工具,我们会看到几个熟悉又陌生的名词(类):HttpRuntime...在HttpRuntime类中,有一个称为ProcessRequestNoDemand的静态方法。...于是,我们再转到ProcessRequestInternal这个方法中,发现了一个重要的对象:HttpContext对象。...至于在请求处理管道中的细节,我们在Part 3中再看,今天就到此为止,谢谢! 四、核心过程总览 ①ISAPIRuntime->HttpWorkerRequest->HttpRuntime ?...③到目前为止的总体流程概览 首先,我们从自己的浏览器通过网络访问Web服务器 当ASP.NET接收到第一个请求时,将会创建一个应用程序域,然后会创建一个宿主环境 然后ASP.NET创建并初始化核心对象
HttpRuntime.Cache在非Web环境也支持,如WinForm、WPF HttpContext.Current.Cache只能用在Web中 MSDN上的解释如下: HttpContext.Current.Cache...那么两者到底有没有区别的?既然两个指向的是同一Cache对象,两者的差别只能出现在HttpContext和HttpRuntime上了。...HttpRuntime:为当前应用程序提供一组ASP.NET运行时服务。...通过上面的定义可以看出:HttpRuntime.Cache相当于就是一个缓存具体实现类,这个类虽然被放在了System.Web命名空间下,但是非Web应用下也是可以使用。...HttpContext.Current.Cache是对上述缓存类的封装,由于封装到了HttpContext类中,局限于只能在知道HttpContext下使用,即只能用于Web应用。
这个语句涉及到了ASP.NET Core程序两个核心对象WebHost和WebHostBuilder。...为此我们将ASP.NET Core最本质、最核心的部分提取出来,重新构建了一个迷你版的ASP.NET Core框架。 ASP.NET Core Mini具有如上所示的三大特点。...四、第一个对象:HttpContext 正如本篇文章表示所说,我们的ASP.NET Core Mini由7个核心对象构建而成。...第一个就是大家非常熟悉的HttpContext对象,它可以说是ASP.NET Core应用开发中使用频率最高的对象。要说明HttpContext的本质,还得从请求处理管道的层面来讲。...那么HttpHandler在ASP.NET Core中是通过Action来表示的吗?
领取专属 10元无门槛券
手把手带您无忧上云