C# ASP.NET Core 中的路由是什么?

来源:Vuejs社区作者:印尼程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《C# ASP.NET Core 中的路由是什么?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C# ASP.NET Core 中的路由是什么?》有用,将其分享出去将是对创作者最好的鼓励。

路由是C# ASP.NET Core应用中负责将HTTP请求映射到对应处理程序的核心机制,它决定了应用如何响应不同URL和HTTP方法的请求,是连接客户端请求和服务器端逻辑的重要桥梁。

路由的核心作用

ASP.NET Core的路由主要完成两项核心工作:一是根据请求的URL和HTTP方法匹配预定义的路由规则,二是将匹配到的请求转发到对应的处理端点,比如控制器中的Action方法或者最小API的处理委托。

路由的工作依赖于两个核心组件:路由中间件端点。路由中间件负责解析请求信息并匹配路由规则,端点则是具体的请求处理逻辑,两者配合完成请求的路由分发。

路由的配置方式

传统路由

传统路由通常在Startup类的Configure方法中通过app.UseRouting()app.UseEndpoints()配合定义,适合基于控制器的应用场景。以下是一个典型的传统路由配置示例:

// 在Configure方法中配置路由
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 启用路由中间件
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        // 定义默认路由规则,匹配 /控制器/Action/参数 的格式
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

上述代码中,路由模板{controller=Home}/{action=Index}/{id?}表示:如果没有指定控制器,默认使用Home控制器;没有指定Action,默认使用Index方法;id参数是可选的。

特性路由

特性路由通过在控制器或者Action方法上添加[Route]特性来定义路由规则,优先级高于传统路由,适合需要精细化控制路由的场景。示例如下:

using Microsoft.AspNetCore.Mvc;

[Route("api/[controller]")]
public class UserController : ControllerBase
{
    // 匹配 GET /api/user 请求
    [HttpGet]
    public IActionResult GetAllUsers()
    {
        return Ok(new[] { "用户1", "用户2" });
    }

    // 匹配 GET /api/user/1 请求,id是路径参数
    [HttpGet("{id}")]
    public IActionResult GetUserById(int id)
    {
        return Ok($"用户ID:{id}");
    }
}

路由模板的常见语法

路由模板中支持多种语法来定义参数和约束,常见的语法规则如下:

  • {参数名}:定义必填的路径参数,比如{id}表示匹配URL中对应位置的参数
  • {参数名?}:定义可选的路径参数,比如{id?}表示该参数可以不出现在URL中
  • {参数名:约束类型}:对参数添加类型约束,比如{id:int}表示id参数必须是整型
  • [controller][action]:在特性路由中自动替换为当前控制器名和Action名

以下是一个带参数约束的路由示例,只有id为整型的请求才会被匹配:

[Route("product/{id:int}")]
public IActionResult GetProduct(int id)
{
    return Ok($"产品ID:{id}");
}

路由匹配的常见场景

处理不同HTTP方法

通过[HttpGet][HttpPost]等特性可以限定路由只匹配对应的HTTP方法,避免不同操作的路由冲突。

[Route("api/order")]
public class OrderController : ControllerBase
{
    // 只匹配 POST 请求
    [HttpPost]
    public IActionResult CreateOrder()
    {
        return Ok("订单创建成功");
    }

    // 只匹配 PUT 请求
    [HttpPut("{id}")]
    public IActionResult UpdateOrder(int id)
    {
        return Ok($"订单{id}更新成功");
    }
}

区域路由

对于大型应用,可以使用区域来划分功能模块,区域路由需要在传统路由中配置区域模板:

app.UseEndpoints(endpoints =>
{
    // 配置区域路由,匹配 /区域/控制器/Action/参数 的格式
    endpoints.MapAreaControllerRoute(
        name: "admin",
        areaName: "Admin",
        pattern: "Admin/{controller=Home}/{action=Index}/{id?}");
});

对应的控制器需要添加[Area("Admin")]特性标识所属区域。

路由的注意事项

路由的匹配顺序是按照定义的先后顺序排列的,先定义的路由规则会被优先匹配,因此更具体的路由规则应该放在更通用的规则之前。另外,路由参数的值可以通过HttpContext.GetRouteData()方法获取,也可以在Action方法的参数中直接接收,框架会自动完成参数绑定。

理解路由的工作原理和配置方式,能够帮助开发者更灵活地设计API接口和页面路由,避免请求匹配错误的问题,提升应用的请求处理效率。

ASP.NET_Core路由中间件端点路由模板修改时间:2026-06-12 12:48:23

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。