Z
ZHANK
编程在线教程C# 教程中间件与管道
Web 开发

中间件与管道

中间件管道模型、Use/Run/Map、异常处理中间件、CORS

中间件与管道

每个 HTTP 请求在 ASP.NET Core 中穿过一个中间件管道——日志、认证、CORS 都是中间件。

学完本章你将: 掌握中间件管道模型、Use/Run/Map、异常处理中间件。


中间件管道

csharp
var app = builder.Build();

// 中间件按注册顺序执行(管道模型)
app.Use(async (context, next) =>
{
    Console.WriteLine("请求进入");
    await next(context);          // 调用下一个中间件
    Console.WriteLine("响应返回");
});

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

app.MapControllers();

app.Run();

自定义中间件

csharp
// 请求耗时日志中间件
app.Use(async (context, next) =>
{
    var sw = Stopwatch.StartNew();
    await next(context);
    sw.Stop();
    Console.WriteLine($"{context.Request.Path}{sw.ElapsedMilliseconds}ms");
});

// 全局异常处理中间件
app.Use(async (context, next) =>
{
    try { await next(context); }
    catch (Exception ex)
    {
        context.Response.StatusCode = 500;
        await context.Response.WriteAsJsonAsync(new {
            error = ex.Message
        });
    }
});

Use / Run / Map

csharp
app.Use(...);     // 执行后调用下一个中间件
app.Run(...);     // 终端中间件——不调用下一个
app.Map("/api", api => {  // 条件分支
    api.UseRouting();
});