ASP.NET Core中Startup类、Configure()方法及中间件详解

ASP.NET Core 程序启动过程如下

1, Startup 类

ASP.NET Core 应用使用Startup类,按照约定命名为StartupStartup类:

  • 可选择性地包括ConfigureServices方法以配置应用的服务。
  • 必须包括Configure方法以创建应用的请求处理管道。

当应用启动时,运行时调用ConfigureServicesConfigure 。

Startup 方法体如下

public class Startup
{
    // 使用此方法向容器添加服务
    public void ConfigureServices(IServiceCollection services)
    {
        ...
    }

    // 使用此方法配置HTTP请求管道
    public void Configure(IApplicationBuilder app)
    {
        ...
    }
}

这篇文章只说Configure

2,Configure() 方法

Configure是一个在

命名空间Microsoft.AspNetCore.Hosting定义的

抽象类 ↓↓↓

public abstract void Configure (Microsoft.AspNetCore.Builder.IApplicationBuilder app);

IApplicationBuilder

IApplicationBuilder 定义用于配置应用请求管道的类,ASP.NET Core 请求管道包含一系列请求委托,依次调用。

不清楚 Asp.Net Core 请求管道、中间件的读者,对这一部分的内容可以参考

https://www.jb51.net/article/234554.htm

https://www.jb51.net/article/234557.htm

常见中间件顺序

  • 异常/错误处理
  • HTTP 严格传输安全协议
  • HTTPS 重定向
  • 静态文件服务器
  • Cookie 策略实施
  • 身份验证
  • 会话
  • MVC

你可以添加其它参数 对 Configure 方法 进行重写,如IHostingEnvironment 、ILoggerFactory

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ... ... , ... ...)
        {
        ... ...
        }

3,中间件

Configure 方法 使用IApplicationBuilder 来使用中间件

有 Use 、Map、Run 三种使用方式

  • Use 使用中间件配置请求管道
  • Map 管道分支
  • Run 管道短路

对这一部分的内容可以参考

https://www.jb51.net/article/234554.htm

https://www.jb51.net/article/234557.htm

Asp.Net Core 内置很多中间件,用户可以直接使用,将在文章后面介绍

4,使用中间件

默认创建 Asp.Net Core Mvc 程序时,会生成如下模板(Asp.Net Core 2.1)

在文章后面或详细列出所有中间件并加以说明

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();    //是否开发环境
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");  //出现错误跳转到 /Error 页面
                app.UseHsts();    //在文章后面的第39行可以看到解释
            }

            app.UseHttpsRedirection();    //把 HTTP 重定向到 HTTPS
            app.UseStaticFiles();       //使用静态文件
            app.UseCookiePolicy();      //与 Cookie 有关

            app.UseMvc(routes =>       //使用 MVP 页面
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }

可以直接使用 app.Use_______ 形式,直接使用内置中间件

5,Configure 方法 的参数 IApplicationBuilder

Configure 方法配置请求管道使用了 IApplicationBuilder,下面将详细列出IApplicationBuilder 默认的方法、参数、特性等。

Properties(性质)

ApplicationServices
获取或设置提供对应用程序服务容器的访问的 IServiceProvider 提供程序

IServiceProvider : 定义用于检索服务对象的机制,即为其他对象提供自定义支持的对象

可以参考 https://www.jb51.net/article/234560.htm

Properties
获取可用于在中间件之间共享数据的 键/值 集合

Properties 是类型为 IDictionary<string,object>

ServerFeatures
获取应用程序服务器提供的HTTP特性集

点击 IFeatureCollection 详细了解

Methods(方法)

Build()
建立此应用程序使用的委托来处理HTTP请求

Build 是一个 AspNetCore.Http.RequestDelegate 类型的委托

New()
创建一个 IApplicationBuilder 共享 Properties 的 IApplicationBuilder

Use(Func<RequestDelegate,RequestDelegate>)
将中间件委托添加到应用程序的请求管道中,对与自定义的中间件,使用此方法。

6,Extension Methods(拓展方法)--微软提供的中间件

使用方法 app._______

以下将列出 所有中间件及其重载方法、说明

注意IApplicationBuilder 范围很广,包括应用启动、依赖关系注入、路由、环境、配置、选项、日志记录、处理错误等。

UseRequestLocalization(IApplicationBuilder)
添加 RequestLocalizationMiddleware 以基于客户端提供的信息自动设置请求的区域性信息

UseRequestLocalization(IApplicationBuilder, RequestLocalizationOptions)
添加 RequestLocalizationMiddleware 以基于客户端提供的信息自动设置请求的区域性信息

UseRequestLocalization(IApplicationBuilder, Action<RequestLocalizationOptions>)
添加 RequestLocalizationMiddleware 以基于客户端提供的信息自动设置请求的区域性信息

UseRequestLocalization(IApplicationBuilder, String[])
添加 RequestLocalizationMiddleware 以基于客户端提供的信息自动设置请求的区域性信息

UseAuthentication(IApplicationBuilder)
将 AuthenticationMiddleware 添加到指定的 IApplicationBuilder ,它支持身份验证功能

UseBrowserLink(IApplicationBuilder)
此方法被调用以在应用程序中启用浏览器链接。它注册了一个方法工厂,为每个请求创建 BrowserLinkMiddleware。

笔者注:

浏览器链接是Visual Studio中的一项功能,可在开发环境和一个或多个Web浏览器之间创建通信通道。您可以使用浏览器链接一次在多个浏览器中刷新Web应用程序,这对于跨浏览器测试很有用

UseIdentity(IApplicationBuilder)
此方法已过时,将在将来的版本中删除。推荐的替代方案是使用 UseAuthentication (在列表的第5行)

UseConnections(IApplicationBuilder, Action<ConnectionsRouteBuilder>)
向 IApplicationBuilder 请求执行管道添加对 ASP.NET Core 连接处理程序的支持

UseCookieAuthentication(IApplicationBuilder)
已经过时,不再推荐使用。官方建议使用 identity 配置(在列表的第5行)

UseCookieAuthentication(IApplicationBuilder, CookieAuthenticationOptions)
已经过时,不再推荐使用。官方建议使用 identity 配置(在列表的第5行)

UseCookiePolicy(IApplicationBuilder)
将 CookiePolicyMiddleware 处理程序添加到指定的 IApplicationBuilder,它支持 cookie 策略功能

UseCookiePolicy(IApplicationBuilder, CookiePolicyOptions)
将 CookiePolicyMiddleware 处理程序添加到指定的 IApplicationBuilder,它支持 cookie 策略功能

UseCors(IApplicationBuilder)
将CORS中间件添加到Web应用程序管道以允许跨域请求

这是一个静态方法,类型为 Microsoft.AspNetCore.Builder.IApplicationBuilder

UseCors(IApplicationBuilder, Action<CorsPolicyBuilder>)
将CORS中间件添加到Web应用程序管道以允许跨域请求

这是一个静态方法,类型为 Microsoft.AspNetCore.Builder.IApplicationBuilder

UseCors(IApplicationBuilder, String)
将CORS中间件添加到Web应用程序管道以允许跨域请求

这是一个静态方法,类型为 Microsoft.AspNetCore.Builder.IApplicationBuilder

UseDefaultFiles(IApplicationBuilder)
为给定的请求路径启用默认文件映射

UseDefaultFiles(IApplicationBuilder, DefaultFilesOptions)
为给定的请求路径启用默认文件映射

  笔者注:

    参数 DefaultFilesOptions 选择默认文件名的选项,类型为 DefaultFilesOptions

    返回 IApplicationBuilder

UseDefaultFiles(IApplicationBuilder, String)
为给定的请求路径启用默认文件映射

  笔者注:

    参数 String为 相对请求路径

    返回 IApplicationBuilder

UseDeveloperExceptionPage(IApplicationBuilder)
从管道捕获同步和异步异常实例,并生成HTML错误响应

UseDeveloperExceptionPage(IApplicationBuilder, DeveloperExceptionPageOptions)
从管道捕获同步和异步异常实例,并生成HTML错误响应

UseDirectoryBrowser(IApplicationBuilder)
在当前路径上启用目录浏览

笔者注:

对于非程序运行目录或特殊目录,用户通过浏览器打开该目录时,会列出目录内容。

UseDirectoryBrowser(IApplicationBuilder, DirectoryBrowserOptions)
在当前路径上启用目录浏览,同上

UseDirectoryBrowser(IApplicationBuilder, String)
在当前路径上启用目录浏览,同上

UseExceptionHandler(IApplicationBuilder)
向管道添加中间件,该中间件将捕获异常、记录异常并在备用管道中重新执行请求。如果响应已经启动,请求将不被重新执行

UseExceptionHandler(IApplicationBuilder, ExceptionHandlerOptions)
向管道添加中间件,该中间件将捕获异常、记录异常并在备用管道中重新执行请求。如果响应已经启动,请求将不被重新执行

UseExceptionHandler(IApplicationBuilder, Action<IApplicationBuilder>)
向管道添加中间件,该中间件将捕获异常、记录异常并在备用管道中重新执行请求。如果响应已经启动,请求将不被重新执行

UseExceptionHandler(IApplicationBuilder, String)
向管道添加中间件,该中间件将捕获异常、记录异常并在备用管道中重新执行请求。如果响应已经启动,请求将不被重新执行

UseFacebookAuthentication(IApplicationBuilder)
使用FaceBook身份认证

UseFacebookAuthentication(IApplicationBuilder, FacebookOptions)
使用FaceBook身份认证

UseFileServer(IApplicationBuilder)
为当前目录中的当前请求路径启用所有静态文件中间件(目录浏览除外)  --注意四者不同点

UseFileServer(IApplicationBuilder, FileServerOptions)
使给定的选项所有静态文件中间件                    --注意四者不同点

UseFileServer(IApplicationBuilder, Boolean)
是否为当前目录中的当前请求路径启用所有静态文件中间件(目录浏览除外)  --注意四者不同点

UseFileServer(IApplicationBuilder, String)
为来自同名目录的给定请求路径启用所有静态文件中间件(目录浏览除外    --注意四者不同点

UseForwardedHeaders(IApplicationBuilder)
转发代理到当前请求报头

UseForwardedHeaders(IApplicationBuilder, ForwardedHeadersOptions)
转发代理到当前请求报头

UseGoogleAuthentication(IApplicationBuilder)
使用 Google 进行身份认证

UseGoogleAuthentication(IApplicationBuilder, GoogleOptions)
使用 Google 进行身份认证

UseHostFiltering(IApplicationBuilder)
增加了过滤请求允许主机头的中间件,无效的请求将被拒绝并返回 400 状态代码

UseHsts(IApplicationBuilder)
添加了使用HSTS的中间件,它添加了严格的传输安全标头

UseHttpMethodOverride(IApplicationBuilder)
允许传入的POST请求以头文件中指定的类型重写方法类型

UseHttpMethodOverride(IApplicationBuilder, HttpMethodOverrideOptions)
允许传入POST请求以表单指定的类型重写方法类型

UseHttpsRedirection(IApplicationBuilder)
添加用于将HTTP请求重定向到HTTPS的中间件。

UseJwtBearerAuthentication(IApplicationBuilder)
UseJwtBearerAuthentication 是过时的认证方案,官方已经不推荐使用

UseJwtBearerAuthentication(IApplicationBuilder, JwtBearerOptions)
UseJwtBearerAuthentication 是过时的认证方案,官方已经不推荐使用

Map(IApplicationBuilder, PathString, Action<IApplicationBuilder>)
根据给定的请求路径的匹配来分支请求管道。如果请求路径从给定路径开始,则执行分支

MapWhen(IApplicationBuilder, Func<HttpContext,Boolean>, Action<IApplicationBuilder>)
根据给定的预测结果对请求流水线进行分支

UseMicrosoftAccountAuthentication(IApplicationBuilder)
UseMicrosoftAccountAuthentication 过时,官方不再推荐使用

UseMicrosoftAccountAuthentication(IApplicationBuilder, MicrosoftAccountOptions)
UseMicrosoftAccountAuthentication 过时,官方不再推荐使用

UseMvc(IApplicationBuilder)
将 MVC 添加到 请求执行管道中

UseMvc(IApplicationBuilder, Action<IRouteBuilder>)
将 MVC 添加到请求执行管道中,并配置路由,使用示例

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });

UseMvcWithDefaultRoute(IApplicationBuilder)
使用默认的路由模板

笔者注:

在你创建Mvc应用时,就已经默认生成

默认的路由模板格式 {controller=Home}/{action=Index}/{id?}

使用此中间件的效果等同上一个表格的示例

UseOAuthAuthentication(IApplicationBuilder)
UseOAuthAuthentication 过时,官方不推荐使用

UseOAuthAuthentication(IApplicationBuilder, OAuthOptions)
UseOAuthAuthentication 过时,官方不推荐使用

UseOpenIdConnectAuthentication(IApplicationBuilder)
UseOpenIdConnectAuthentication  过时,官方不推荐使用

UseOpenIdConnectAuthentication(IApplicationBuilder, OpenIdConnectOptions)
UseOpenIdConnectAuthentication  过时,官方不推荐使用

UseResponseCompression(IApplicationBuilder)
添加用于动态压缩HTTP响应的中间件

UseRewriter(IApplicationBuilder)
检查给定URL是否匹配规则和条件(正则表达式),并修改匹配的HTTP语境。

UseRewriter(IApplicationBuilder, RewriteOptions)
检查给定URL是否匹配规则和条件(正则表达式),并修改匹配的HTTP语境

UseRouter(IApplicationBuilder, IRouter)
创建路由规则并添加到路由表中

UseRouter(IApplicationBuilder, Action<IRouteBuilder>)
创建路由规则并添加到路由表中

Run(IApplicationBuilder, RequestDelegate)
使管道短路

笔者注:

当管道碰到Run使,无论后面是否还有其它中间件,都会忽略

UseSession(IApplicationBuilder)
添加 Session 以自动启用应用程序的会话状态

UseSession(IApplicationBuilder, SessionOptions)
添加 Session 以自动启用应用程序的会话状态

UseSignalR(IApplicationBuilder, Action<HubRouteBuilder>)
添加 SignalR 到请求管道中

UseSpa(IApplicationBuilder, Action<ISpaBuilder>)
通过返回单页应用程序(SPA)的默认页面,处理从中间件链中此点开始的所有请求。这个中间件应该放在链的末尾,以便其他提供静态文件、MVC操作等的中间件优先

UseStaticFiles(IApplicationBuilder)
为当前请求路径启用静态文件服务

UseStaticFiles(IApplicationBuilder, StaticFileOptions)
为当前请求路径启用静态文件服务

UseStaticFiles(IApplicationBuilder, String)
为当前请求路径启用静态文件服务

UseStatusCodePages(IApplicationBuilder)
添加具有默认响应处理程序的中间件,该处理程序检查400和599之间没有主体时的状态代码,以进行响应

UseStatusCodePages(IApplicationBuilder, StatusCodePagesOptions)
同上

UseStatusCodePages(IApplicationBuilder, Action<IApplicationBuilder>)
同上

UseStatusCodePages(IApplicationBuilder, Func<StatusCodeContext,Task>)
同上

UseStatusCodePages(IApplicationBuilder, String, String)
同上

UseStatusCodePagesWithRedirects(IApplicationBuilder, String)
同上

UseStatusCodePagesWithReExecute(IApplicationBuilder, String, String)
同上

UseTwitterAuthentication(IApplicationBuilder)
使用 Twitter 进行身份认证,官方不再推荐这种过时用法

UseTwitterAuthentication(IApplicationBuilder, TwitterOptions)
使用 Twitter 进行身份认证,官方不再推荐这种过时用法

Use(IApplicationBuilder, Func<HttpContext,Func<Task>,Task>)
将一个中间件委托添加到应用程序的请求管道中

UseMiddleware(IApplicationBuilder, Type, Object[])
将一个中间件添加到应用程序的请求管道中,注意与上面的区别

UseMiddleware<TMiddleware>(IApplicationBuilder, Object[])
将一个中间件添加到应用程序的请求管道中,注意与上面的区别

UsePathBase(IApplicationBuilder, PathString)
加中间件,从中间件从请求路径中提取指定的路径库并将其附加到请求路径库

UseWhen(IApplicationBuilder, Func<HttpContext,Boolean>, Action<IApplicationBuilder>)
有条件地在请求管道中创建一个分支,并将其重新连接到主管道

UseWebpackDevMiddleware(IApplicationBuilder, WebpackDevMiddlewareOptions)
英文原文如下

Enables Webpack dev middleware support. This hosts an instance of the Webpack compiler in memory in your application so that you can always serve up-to-date Webpack-built resources without having to run the compiler manually. Since the Webpack compiler instance is retained in memory, incremental compilation is vastly faster that re-running the compiler from scratch.

Incoming requests that match Webpack-built files will be handled by returning the Webpack compiler output directly, regardless of files on disk. If compilation is in progress when the request arrives, the response will pause until updated compiler output is ready.

UseWebSockets(IApplicationBuilder)
WebSockets服务

UseWebSockets(IApplicationBuilder, WebSocketOptions)
WebSockets服务

UseWelcomePage(IApplicationBuilder)
添加一个欢迎页面到请求管道中

UseWelcomePage(IApplicationBuilder, WelcomePageOptions)
添加一个欢迎页面到请求管道中,可以自己配置欢迎页面

UseWelcomePage(IApplicationBuilder, PathString)
添加一个欢迎页面到请求管道中,自定义欢迎页面的路径

UseWelcomePage(IApplicationBuilder, String)
添加一个欢迎页面到请求管道中

UseSpaStaticFiles(IApplicationBuilder)
将应用程序配置为为单页应用程序(SPA)提供静态文件

UseSpaStaticFiles(IApplicationBuilder, StaticFileOptions)
将应用程序配置为为单页应用程序(SPA)提供静态

到此这篇关于ASP.NET Core中Startup类、Configure()方法及中间件详解的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 理解ASP.NET Core 启动类(Startup)

    目录 准备工作:一份ASP.NET Core Web API应用程序 Startup类 Startup构造函数 ConfigureServices Configure 省略Startup类 IStartupFilter IHostingStartup HostingStartup 程序集 HostingStartup 特性 激活HostingStarup程序集 1.使用环境变量(推荐) 2.在程序中配置 多环境配置 环境配置方式 基于环境的 Startup 1.将IWebHostEnvironm

  • ASP.NET Core中间件初始化的实现

    前言 在日常使用ASP.NET Core开发的过程中我们多多少少会设计到使用中间件的场景,ASP.NET Core默认也为我们内置了许多的中间件,甚至有时候我们需要自定义中间件来帮我们处理一些请求管道过程中的处理.接下来,我们将围绕着以下几个问题来简单探究一下,关于ASP.NET Core中间件是如何初始化的 首先,使用UseMiddleware注册自定义中间件和直接Use的方式有何不同 其次,使用基于约定的方式定义中间件和使用实现IMiddleware接口的方式定义中间件有何不同 再次,使用基

  • 深入探究ASP.NET Core Startup初始化问题

    前言 Startup类相信大家都比较熟悉,在我们使用ASP.NET Core开发过程中经常用到的类,我们通常使用它进行IOC服务注册,配置中间件信息等.虽然它不是必须的,但是将这些操作统一在Startup中做处理,会在实际开发中带来许多方便.当我们谈起Startup类的时候你有没有好奇过以下几点 为何我们自定义的Startup可以正常工作. 我们定义的Startup类中ConfigureServices和Configure只能叫这个名字才能被调用到吗? 在使用泛型主机(IHostBuilder)

  • ASP.NET Core使用HostingStartup增强启动操作方法详解

    概念 在ASP.NET Core中我们可以使用一种机制来增强启动时的操作,它就是HostingStartup.如何叫"增强"操作,相信了解过AOP概念的同学应该都非常的熟悉.我们常说AOP使用了关注点分离的方式,增强了对现有逻辑的操作.而我们今天要说的HostingStartup就是为了"增强"启动操作,这种"增强"的操作甚至可以对现有的程序可以做到无改动的操作.例如,外部程序集可通过HostingStartup实现为应用提供配置服务.注册服务或

  • ASP.NET Core 中间件的使用之全局异常处理机制

    目录 1.创建项目 2.创建全局异常过滤器 3.依赖注入全局异常处理机制 4.测试全局异常处理机制 前言: 我们经常听到"秒修复秒上线",觉得很厉害的样子. 其实不然,这只是一个调侃而已,出现问题的方式很多(逻辑漏洞.代码异常.操作方式不正确等). 我们今天来说代码异常问题怎么快速定位,减少不必要的时间浪费. 这就是今天的主题"添加全局异常处理机制"捕捉异常存储到数据库(mongodb.SqlServer.MySQL等). PS:输出txt的话不怎么友好,不是所有人

  • 理解ASP.NET Core 中间件(Middleware)

    目录 中间件 中间件管道 Run Use UseWhen Map MapWhen Run & Use & UseWhen & Map & Map 编写中间件并激活 基于约定的中间件 基于工厂的中间件 基于约定的中间件 VS 基于工厂的中间件 中间件 先借用微软官方文档的一张图: 可以看到,中间件实际上是一种配置在HTTP请求管道中,用来处理请求和响应的组件.它可以: 决定是否将请求传递到管道中的下一个中间件 可以在管道中的下一个中间件处理之前和之后进行操作 此外,中间件的注

  • ASP.NET Core的中间件与管道介绍

    今天来讨论一个ASP.NET Core 很重要概念管道和中间件,在ASP.NET Core中,针对HTTP请求采用pipeline也就是通常说的管道方式来处理,而管道容器内可以挂载很多中间件(处理逻辑)“串联”来处理HTTP请求,每一个中间件都有权决定是否需要执行下一个中间件,或者直接做出响应.这样的机制使得HTTP请求能够很好的被层层处理和控制,并且层次清晰处理起来甚是方便. 示意图如下: 为了再次说明管道和中间件的概念,举一个官方给出的权限验证的例子,中间件A,B分别按顺序挂载在管道容器中,

  • ASP.NET Core中Startup类、Configure()方法及中间件详解

    ASP.NET Core 程序启动过程如下 1, Startup 类 ASP.NET Core 应用使用Startup类,按照约定命名为Startup.Startup类: 可选择性地包括ConfigureServices方法以配置应用的服务. 必须包括Configure方法以创建应用的请求处理管道. 当应用启动时,运行时调用ConfigureServices和Configure . Startup 方法体如下 public class Startup { // 使用此方法向容器添加服务 publ

  • ASP.NET Core中如何使用表达式树创建URL详解

    表达式树(Expression Tree) 表达式树是不可执行的代码,它只是用于表示一种树状的数据结构,树上的每一个节点都表示为某种表达式类型,大概有25种表达式类型,它们都派生自Expression类.创建表达式树具体有两个优势: 1.对表达式树的代码进行编辑修改,使表达式树中的代码变成动态代码,根据不同的数据库修改树上的代码逻辑从而达到动态切换数据库查询语句的目的,用表达式树可以动态构建针对不同数据库的查询语句. 2.完成类似反射访问未知对象的属性,通过动态构造表达式树,生成委托. 当我们在

  • Hangfire在ASP.NET CORE中的简单实现方法

    hangfire是执行后台任务的利器,具体请看官网介绍:https://www.hangfire.io/ 新建一个asp.net core mvc 项目 引入nuget包 Hangfire.AspNetCore hangfire的任务需要数据库持久化,我们在Startup类中修改ConfigureServices 然后在Configure方法中启用hangfire中间件 现在我们运行一下项目,可以看到,数据库里自动生成了很多表,这些表就是用来持久化任务的 我们打开如下地址,可以看到hangfir

  • 如何在ASP.Net Core中使用 IHostedService的方法

    在我们应用程序中常常会有一些执行后台任务和任务调度的需求,那如何在 ASP.Net Core 中实现呢? 可以利用 Azure WebJobs 或者其他一些第三方任务调度框架,如:Quartz 和 Hangfire. 在 ASP.Net Core 中,也可以将 后台任务 作为托管服务的模式,所谓的 托管服务 只需要实现框架中的 IHostedService 接口并囊括进你需要的业务逻辑作为后台任务,这篇文章将会讨论如何在 ASP.Net Core 中构建托管服务. 创建托管服务 要想创建托管服务

  • 在 ASP.Net Core 中使用 MiniProfiler的方法

    web应用程序的性能相信是大家普遍关心的一个问题,也相信大家有很多工具可用来分析应用程序的性能并能够找到其中的瓶颈,MiniProfiler 就是这个领域中的一款产品,它是一款简单的,功能强大的web应用分析工具,MiniProfiler 可用来帮助我们找到 慢查询, 慢响应 等问题. MiniProfiler 可用在 Asp.Net 和 ASP.Net Core 中,这篇文章将会讨论如何使用 MiniProfiler,并通过它找到应用程序的性能问题. 安装 MiniProfiler 要想使用

  • 在ASP.NET Core 中发送邮件的实现方法(必看篇)

    前言 我们知道目前 .NET Core 还不支持 SMTP 协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组件,它们分别是 MailKit 和 FluentEmail , 下面我对它们分别进行介绍. MailKit 在 ASP.NET Core 中,可以使用 MailKit 来发送邮件,它支持跨平台,并且支持 IMAP, POP3, SMTP 等协议. 你可以使用下面的方式安装: Install-Package MailKit 下面是

  • ASP.NET Core扩展库之日志功能的使用详解

    上一篇我们对Xfrogcn.AspNetCore.Extensions扩展库功能进行了简单的介绍,从这一篇文章开始,我将逐步介绍扩展库中的核心功能.     日志作为非业务的通用领域基础功能,有非常多的技术实现,这些第三方库避免了我们花费时间去重复实现,不过,很多日志库配置复杂,不易于使用,入手较难,而有些库可能与ASP.NET Core的结合并不好.     如果我们没有对所使用的日志库进行详细了解,日志库也可能产生严重的问题,在我的开发生涯中,曾经遇到过多次因为日志库而导致的生产事故.  

  • ASP.NET Core扩展库之Http日志的使用详解

    最佳实践都告诉我们不要记录请求的详细日志,因为这有安全问题,但在实际开发中,请求的详细内容对于快速定位问题却是非常重要的,有时也是系统的强力证据.Xfrogcn.AspNetCore.Extensions扩展库提供了服务端和客户端的详细日志功能,通过配置可以开启. 服务端日志通过请求中间件来完成,中间件会以Trace级别记录请求和应答详情,以Debug级别记录请求耗时.服务的请求日志的名称为ServerRequest.Logger 要开启服务端详情日志,只需将扩展库配置中的ServerReque

  • java 中序列化与readResolve()方法的实例详解

    java 中序列化与readResolve()方法的实例详解 readResolve方法是作用是什么?这个方法跟对象的序列化相关(这样倒是解释了为什么 readResolve方法是private修饰的). 怎么跟对象的序列化相关了? 下面我们先简要地回顾下对象的序列化.一般来说,一个类实现了 Serializable接口,我们就可以把它往内存地写再从内存里读出而"组装"成一个跟原来一模一样的对象.不过当序列化遇到单例时,里边就有了个问题:从内存读出而组装的对象破坏了单例的规则.单例是要

  • Python中set与frozenset方法和区别详解

    set(可变集合)与frozenset(不可变集合)的区别: set无序排序且不重复,是可变的,有add(),remove()等方法.既然是可变的,所以它不存在哈希值.基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交集), difference(差集)和sysmmetric difference(对称差集)等数学运算. sets 支持 x in set, len(set),和 for x in set.作为一个无序的集合,sets不记录元素位

随机推荐