0

0

C# ASP.NET Core中的路由(Routing)配置 - 从约定到特性的路由

畫卷琴夢

畫卷琴夢

发布时间:2025-12-26 13:22:02

|

339人浏览过

|

来源于php中文网

原创

ASP.NET Core路由分约定式和特性路由两种,前者在Program.cs中全局配置,适用于MVC页面应用,如MapControllerRoute定义{controller=Home}/{action=Index}/{id?};后者通过[Route]等属性在控制器或方法上直接设置,更灵活,适合RESTful API,如[HttpGet("api/[controller]")];可混合使用,MapControllers()启用特性路由,约定路由处理其余请求;支持路由约束如{id:int}、{name:alpha}及可选参数{id?},合理组合避免冲突,现代项目推荐以特性路由为主。

c# asp.net core中的路由(routing)配置 - 从约定到特性的路由

在 ASP.NET Core 中,路由(Routing)是将传入的 HTTP 请求映射到控制器中的具体操作方法的过程。它决定了 URL 如何被解析和处理。ASP.NET Core 提供了两种主要方式来配置路由:约定式路由(Conventional Routing)和特性路由(Attribute Routing)。了解它们的区别和使用场景,有助于构建清晰、可维护的 Web API 或 MVC 应用。

约定式路由(Conventional Routing)

约定式路由是在应用启动时通过全局模式定义的,通常在 Program.csStartup.cs 中配置。它适用于传统的 MVC 模式,强调统一的 URL 结构。

例如,在 Program.cs 中添加如下代码:

builder.Services.AddControllersWithViews();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();

app.UseRouting();

app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");

上述配置表示:

  • 默认访问 /Home/Index
  • URL 格式为:/Controller/Action/Id
  • Id 是可选参数

这种模式适合页面驱动的应用,如后台管理系统,URL 规律性强,易于维护。

特性路由(Attribute Routing)

特性路由通过在控制器或操作方法上使用属性来定义路由,更加灵活,特别适合构建 RESTful 风格的 Web API。

启用特性路由只需在控制器上添加 [Route] 特性:

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
[HttpGet] // GET: api/products
public IActionResult Get() => Ok(new[] { "product1", "product2" });

[HttpGet("{id}")] // GET: api/products/5
public IActionResult GetById(int id) => Ok($"Product {id}");

[HttpPost] // POST: api/products
public IActionResult Create([FromBody] string name) => CreatedAtAction(nameof(GetById), new { id = 1 }, name);
}

关键点:

SPLASH
SPLASH

将音乐制作的乐趣带给每个人。

下载
  • [controller] 自动替换为控制器名称(去掉 Controller 后缀)
  • 支持组合使用类级别和方法级别的路由
  • 可精确控制每个端点的 URL 路径和 HTTP 方法

混合使用约定与特性路由

你可以在同一个项目中同时使用两种方式。MVC 页面用约定路由,API 接口用特性路由。

确保调用 MapControllers() 来启用特性路由:

app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");

app.MapControllers(); // 启用所有使用 [ApiController] 和路由特性的控制器

这样,带特性的控制器会优先按属性路由匹配,其余走默认约定。

路由约束与可选参数

无论是哪种方式,都可以添加约束来限制参数格式:

  • {id:int} —— 只匹配整数
  • {name:alpha} —— 只匹配字母
  • {date:datetime} —— 匹配日期时间
  • {id?} —— 表示参数可选

例如:

[HttpGet("users/{id:int:min(1)}")]
public IActionResult GetUser(int id)
{
// 只接受大于等于1的整数 id
}

基本上就这些。根据项目类型选择合适的路由方式:页面为主的系统可用约定式,API 服务推荐特性路由,现代项目往往以特性路由为主,更直观、可控。不复杂但容易忽略的是顺序和组合使用的方式,合理配置才能避免冲突。

相关文章

路由优化大师
路由优化大师

路由优化大师是一款及简单的路由器设置管理软件,其主要功能是一键设置优化路由、屏广告、防蹭网、路由器全面检测及高级设置等,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

144

2025.11.26

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

311

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

703

2023.08.22

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

184

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

255

2023.10.25

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

311

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

512

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

46

2025.08.29

虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

25

2025.12.25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.2万人学习

SciPy 教程
SciPy 教程

共10课时 | 0.9万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号