ZetCode

ASP.NET UseEndpoints

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 UseEndpoints 中间件。这一强大功能是现代 ASP.NET 应用程序中路由和终结点配置的核心。

ASP.NET Core 在 3.0 版本中引入了终结点路由,UseEndpoints 成为了定义请求处理管道的主要方式。它提供了对路由和终结点执行的精细控制。

基本定义

UseEndpoints 是 ASP.NET Core 中的一个中间件组件,它定义了应用程序的请求处理管道。所有路由和终结点都在这里配置。

此中间件取代了旧的 UseMvc 方法,并提供了更好的性能和灵活性。它支持约定路由和属性路由模式。

UseEndpoints 与终结点路由配合使用,后者将路由匹配与终结点执行分开。这使得中间件可以根据匹配到的路由做出决策。

该中间件通常添加到中间件管道的末尾。它使用 lambda 表达式来定义路由模式及其对应的处理程序。

ASP.NET UseEndpoints 示例

以下示例演示了一个基本的 ASP.NET 应用程序,它使用 UseEndpoints 处理各种路由场景。

Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.UseRouting();

app.UseEndpoints(endpoints =>
{
    // Simple GET endpoint
    endpoints.MapGet("/", async context =>
    {
        await context.Response.WriteAsync("Welcome to our ASP.NET 8 application!");
    });

    // Route with parameter
    endpoints.MapGet("/greet/{name}", async context =>
    {
        var name = context.Request.RouteValues["name"];
        await context.Response.WriteAsync($"Hello, {name}!");
    });

    // Conventional MVC-style routing
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");

    // Minimal API endpoint
    endpoints.MapGet("/products", async context =>
    {
        var products = new[] { "Laptop", "Mouse", "Keyboard" };
        await context.Response.WriteAsJsonAsync(products);
    });
});

app.Run();

此示例展示了使用 UseEndpoints 进行的四种不同的终结点配置。第一个是简单的根终结点,它返回一个欢迎消息。

第二个终结点演示了路由参数,它从 URL 中提取名称。第三个展示了用于控制器的传统 MVC 路由。

第四个终结点是一个最小化 API 示例,它返回 JSON 数据。所有这些终结点都在 UseEndpoints 中间件块中配置。

请注意,必须在调用 UseEndpoints 之前调用 UseRouting。UseRouting 执行路由匹配,而 UseEndpoints 执行匹配到的终结点。

这种方法提供了所有应用程序路由的集中配置。它支持各种终结点类型,包括 MVC 控制器、Razor Pages 和最小化 API。

来源

Microsoft ASP.NET Core 路由文档

在本文中,我们探讨了 ASP.NET 8 中的 UseEndpoints 中间件。这个关键组件为现代 Web 应用程序提供了灵活的路由配置。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 ASP.NET 教程