C# ASP.NET Core中的路由(Routing)配置 - 从约定到特性的路由
发布时间 - 2025-12-26 00:00:00 点击率:次ASP.NET Core路由分约定式和特性路由两种,前者在Program.cs中全局配置,适用于MVC页面应用,如MapControllerRoute定义{controller=Home}/{action=Index}/{id?};后者通过[Route]等属性在控制器或方法上直接设置,更灵活,适合RESTful API,如[HttpGet("api/[controller]")];可混合使用,MapControllers()启用特性路由,约定路由处理其余请求;支持路由约束如{id:int}、{name:alpha}及可选参数{id?},合理组合避免冲突,现代项目推荐以特性路由为主。
在 ASP.NET Core 中,路由(Routing)是将传入的 HTTP 请求映射到控制器中的具体操作方法的过程。它决定了 URL 如何被解析和处理。ASP.NET Core 提供了两种主要方式来配置路由:约定式路由(Conventional Routing)和特性路由(Attribute Routing)。了解它们的区别和使用场景,有助于构建清晰、可维护的 Web API 或 MVC 应用。
约定式路由(Conventional Routing)
约定式路由是在应用启动时通过全局模式定义的,通常在 Program.cs 或 Startup.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);
}
关键点:
- [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 服务推荐特性路由,现代项目往往以特性路由为主,更直观、可控。不复杂但容易忽略的是顺序和组合使用的方式,合理配置才
能避免冲突。
# 路由
# app
# 区别
# restful api
# c#
# .net
# mvc
# restful
# String
# if
# date
# Error
# int
# 接口
# class
# public
# Attribute
# var
# default
# http
# 可选
# 两种
# 适用于
# 操作方法
# 的是
# 是在
# 你可以
# 管理系统
# 只需
# 哪种
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
,南京靠谱的征婚网站?
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
如何破解联通资金短缺导致的基站建设难题?
如何在IIS中新建站点并配置端口与物理路径?
网站页面设计需要考虑到这些问题
如何解决hover在ie6中的兼容性问题
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
,怎么在广州志愿者网站注册?
如何撰写建站申请书?关键要点有哪些?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
深圳网站制作平台,深圳市做网站好的公司有哪些?
如何在Windows环境下新建FTP站点并设置权限?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
LinuxShell函数封装方法_脚本复用设计思路【教程】
动图在线制作网站有哪些,滑动动图图集怎么做?
如何快速启动建站代理加盟业务?
如何用AWS免费套餐快速搭建高效网站?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
如何快速查询网站的真实建站时间?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
微信小程序 HTTPS报错整理常见问题及解决方案
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
如何在VPS电脑上快速搭建网站?
javascript中闭包概念与用法深入理解
详解jQuery中基本的动画方法
php结合redis实现高并发下的抢购、秒杀功能的实例
Python自动化办公教程_ExcelWordPDF批量处理案例
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
如何打造高效商业网站?建站目的决定转化率
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
如何在云主机上快速搭建网站?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
大同网页,大同瑞慈医院官网?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
历史网站制作软件,华为如何找回被删除的网站?
Laravel怎么在Blade中安全地输出原始HTML内容
音乐网站服务器如何优化API响应速度?
企业网站制作这些问题要关注
网站制作报价单模板图片,小松挖机官方网站报价?
怎么用AI帮你设计一套个性化的手机App图标?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧

