ASP.NET CORE中间件

概念定义

ASP.NET Core 中间件是在 ASP.NET Core 应用程序处理请求和响应过程中执行的组件。中间件是一种轻量级的插件机制,它可以通过添加、修改或删除请求和响应管道中的行为,来扩展应用程序的功能。


中间件原理

在 ASP.NET Core 中,中间件是按照顺序构建的管道,每个中间件都负责执行特定的任务,并将控制权传递给下一个中间件。中间件可以处理请求、修改响应、记录日志、处理错误等。中间件可以自定义添加和移除,也可以使用现有的中间件。

以下是一些常见的 ASP.NET Core 中间件:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // 注册服务
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // 检查环境
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
        }

        // 添加静态文件中间件
        app.UseStaticFiles();

        // 添加路由中间件
        app.UseRouting();

        // 添加认证中间件
        app.UseAuthentication();

        // 添加授权中间件
        app.UseAuthorization();

        // 添加自定义中间件
        app.Use(async (context, next) =>
        {
            // 处理请求
            await next();
            // 处理响应
        });

        // 添加终端中间件
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller}/{action}/{id?}");
        });
    }
}


1.路由中间件

它用于根据 URL 路由到正确的处理程序方法,以处理传入的请求。

C# 的路由中间件可用于在 ASP.NET Core 应用程序中处理传入 HTTP 请求的路由。以下是 C# 路由中间件的用法:

在 ASP.NET Core 应用程序中添加 Microsoft.AspNetCore.Routing 包。

在 Startup.cs 文件的 Configure 方法中添加路由中间件。如下所示:

app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller}/{action}/{id?}");
});

添加控制器和操作方法,以便在路由中指定它们的位置。如下所示:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
    public IActionResult About()
    {
        return View();
    }
}

在 Views 文件夹中创建与操作方法名称相同的视图。如下所示:

- Views
  - Home
    - Index.cshtml
    - About.cshtm

启动应用程序并导航到指定的路由。例如,如果默认路由为 "{controller}/{action}/{id?}", 则可以在浏览器中输入 "https://localhost:5001/Home/Index" 访问 Index 操作方法。

以上是 C# 路由中间件的基本用法。根据需要,还可以自定义路由模板,支持属性路由等高级功能。


2.静态文件中间件

它用于提供静态文件,如 HTML、CSS 和 JavaScript 等。

C# 中有一些流行的静态文件中间件,可以用于处理和提供静态文件,例如 CSS、JavaScript、图像等等。下面是几个常用的静态文件中间件示例:

Microsoft.AspNetCore.StaticFiles 静态文件中间件

这个中间件是 ASP.NET Core 框架自带的,用于提供静态文件。使用时需要在 Startup.cs 文件的 Configure 方法中添加以下代码:

app.UseStaticFiles();
Microsoft.AspNetCore.SpaServices 静态文件中间件

这个中间件可以用于支持单页应用程序(SPA)的开发。使用时需要在 Startup.cs 文件的 Configure 方法中添加以下代码:

app.UseSpaStaticFiles();
Swashbuckle.AspNetCore.SwaggerUI 静态文件中间件

这个中间件可以用于为 Swagger UI 提供静态文件服务。使用时需要在 Startup.cs 文件的 Configure 方法中添加以下代码:

app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    c.RoutePrefix = "swagger";
});

这些中间件可以根据你的需要进行配置和使用。它们可以用于在 ASP.NET Core 应用程序中提供静态文件服务,并且可以自定义文件路径、文件类型和缓存策略等。


3.认证中间件

它用于验证用户身份并授予访问权限。

在 C# 中,可以使用 ASP.NET Core 中间件来实现认证。以下是一些常用的认证中间件:


1.Microsoft.AspNetCore.Authentication:这个中间件是 ASP.NET Core 的默认身份验证中间件,支持多种身份验证方案,例如 cookie、OpenID Connect 和 OAuth。


2.Microsoft.AspNetCore.Authentication.Cookies:这个中间件用于支持基于 Cookie 的身份验证方案。可以通过配置选项来控制 Cookie 的行为,例如 Cookie 的名称、过期时间等。


3.Microsoft.AspNetCore.Authentication.JwtBearer:这个中间件用于支持基于 JSON Web Token(JWT)的身份验证方案。可以通过配置选项来控制 JWT 的验证逻辑、签名算法等。


4.Microsoft.AspNetCore.Identity:这个中间件用于支持 ASP.NET Core 的身份验证和授权系统。可以用它来管理用户、角色和权限等。


这些中间件可以通过 NuGet 包管理器来安装和使用。安装后,需要在 Startup.cs 中进行配置和注册。例如,要使用 cookie 身份验证中间件,可以在 ConfigureServices 方法中添加以下代码:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.LoginPath = "/Account/Login";
        options.AccessDeniedPath = "/Account/AccessDenied";
    });

这里使用了 CookieAuthenticationDefaults.AuthenticationScheme 来指定身份验证方案为基于 Cookie 的身份验证,然后使用 AddCookie 方法来添加 cookie 身份验证中间件,并配置了登录路径和拒绝访问路径。然后,在 Configure 方法中添加以下代码:

app.UseAuthentication();
app.UseAuthorization();

这里使用了 UseAuthentication 方法来启用身份验证中间件,并使用了 UseAuthorization 方法来启用授权中间件。这些方法必须放在所有路由配置之前。


4.授权中间件

它用于控制用户对资源的访问权限。

C# 授权中间件是一种用于在应用程序中实现授权和访问控制的软件组件。授权中间件的主要目的是验证用户身份并根据其权限控制其对应用程序中的资源的访问。


以下是一些常见的 C# 授权中间件:

1.ASP.NET Identity:用于在 ASP.NET 应用程序中实现授权和身份验证的官方 Microsoft 库。

2.IdentityServer4:一个基于 OpenID Connect 和 OAuth 2.0 协议的授权服务器,可用于提供单点登录和 API 访问授权。

3.PolicyServer:一个开源的授权服务器,可帮助您定义和管理应用程序中的访问策略和角色。

4.Auth0:一个基于云的身份验证和授权平台,可用于在应用程序中集成身份验证和授权功能。

5.JWT(JSON Web Token):一种用于在客户端和服务器之间安全传递用户身份信息的标准。C# 中有许多库可用于 JWT 的生成和验证。


这些授权中间件都具有不同的特点和用途,您可以根据您的具体需求选择其中之一。


5.异常处理中间件

它用于处理应用程序中的异常,以提供更好的用户体验。

C# 中的异常处理中间件通常用于在应用程序的管道中处理未处理的异常。中间件是一种在请求和响应管道中执行操作的软件组件。异常处理中间件可以捕获应用程序中的异常并执行相应的处理操作。


下面是一个使用 C# 异常处理中间件的示例:

using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
public class ExceptionMiddleware
{
    private readonly RequestDelegate _next;
    public ExceptionMiddleware(RequestDelegate next)
    {
        _next = next;
    }
    public async Task InvokeAsync(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception ex)
        {
            // 处理异常,例如记录日志或返回错误消息给客户端
            context.Response.StatusCode = 500;
            await context.Response.WriteAsync("An error occurred: " + ex.Message);
        }
    }
}

在这个示例中,ExceptionMiddleware 类实现了一个中间件,用于处理未处理的异常。该类的 InvokeAsync 方法首先尝试调用管道中的下一个中间件,如果有异常,则捕获异常并执行相应的处理操作。在这个示例中,异常被写入 HTTP 响应并返回给客户端。


要使用这个中间件,需要将其添加到应用程序的管道中:

public void Configure(IApplicationBuilder app)
{
    app.UseMiddleware<ExceptionMiddleware>();
    // 添加其他中间件...
}

在这个示例中,ExceptionMiddleware 中间件被添加到应用程序的管道中,以便在异常发生时进行处理。


6.日志中间件

它用于记录应用程序的活动,以便跟踪和调试问题。

在C#中,可以使用一些不同的日志中间件来记录应用程序的日志信息。以下是几个流行的选项:


1.Serilog: Serilog 是一个简单、灵活且可扩展的日志记录库。 


2.NLog:NLog 是一个免费的、开源的日志记录库,具有强大的扩展性。 


3.log4net:log4net 是一个免费的、开源的日志记录库,可以帮助你轻松地记录日志信息。 


这些日志中间件都有其独特的特点和优势。选择哪一个最适合您的应用程序,取决于您的具体需求和偏好。不过,无论选择哪一个,都应该在应用程序中正确地配置它们,以确保您能够有效地记录所需的日志信息。



7.CORS跨域中间件

它用于在客户端和服务器之间启用跨域资源共享。

可以通过在 Startup.cs 文件中的 Configure 方法中添加中间件来配置 ASP.NET Core 中间件管道。中间件的顺序很重要,因为每个中间件都必须等待前一个中间件处理完请求才能继续处理。

C#中,您可以使用CORS中间件来启用跨域资源共享。CORS(跨源资源共享)是一种安全机制,它允许Web应用程序从其他域访问其资源。下面是如何在C#中使用CORS中间件:


1.在NuGet包管理器中安装Microsoft.AspNetCore.Cors软件包。

2.在Startup.cs文件中,使用以下代码配置CORS中间件:

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowAllOrigins",
            builder =>
            {
                builder.AllowAnyOrigin()
                       .AllowAnyHeader()
                       .AllowAnyMethod();
            });
    });
    services.AddMvc();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseCors("AllowAllOrigins");
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

在这个例子中,我们配置了一个名为“AllowAllOrigins”的CORS策略,该策略允许从任何来源访问任何资源,并允许任何HTTP方法和头部。然后,在Configure方法中,我们将CORS中间件添加到管道中,并指定要使用的CORS策略。



8.过滤器

在 .NET Core 中,过滤器是一种可用于控制器方法的中间件。过滤器在控制器方法执行之前、期间或之后执行一些操作,以便可以在整个应用程序中实现重复的行为。例如,授权检查、日志记录和性能计量等功能可以使用过滤器来实现。

详细用法:https://www.donet5.com/Doc/27/2538

果糖网