新闻中心

.NET Web API如何配置路由(Routing)

2025-11-12
浏览次数:
返回列表
启用属性路由是推荐做法,通过在Program.cs中调用app.MapControllers()并使用[Route]和HTTP特性(如[HttpGet])在控制器上定义精确路径,实现灵活、清晰的API路由管理。

.net web api如何配置路由(routing)

在 .NET Web API 中,路由(Routing)决定了客户端请求如何映射到控制器中的具体操作方法。合理配置路由是构建清晰、可维护 API 的关键一步。.NET 支持两种主要的路由方式:传统基于约定的路由(Convention-based Routing)和属性路由(Attribute Routing)。下面介绍如何在项目中正确配置它们。

启用属性路由(Recommended)

现代 .NET Web API 推荐使用属性路由,因为它更灵活、直观,能精确控制每条路由。

Program.csStartup.cs(取决于你使用的 .NET 版本)中,需要显式启用属性路由。

以 .NET 6+ 的 Program.cs 为例:

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

// 启用 MVC 并添加控制器支持
app.MapControllers(); // 这会启用属性路由

app.Run();

然后在控制器或方法上使用 [Route][HttpGet] 等特性定义路径:

[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
    [HttpGet] // GET: api/products
    public IActionResult GetAll() => 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);
}

这样每个端点的路径都清晰可见,易于维护。

千鹿Pr助手 千鹿Pr助手

智能Pr插件,融入众多AI功能和海量素材

千鹿Pr助手 128 查看详情 千鹿Pr助手

配置传统路由(可选)

如果你希望使用基于约定的路由(比如 RESTful 风格自动匹配动作),可以在 MapControllers 之外手动添加传统路由模板。

Program.cs 中:

app.UseRouting();

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "api/{controller}/{action}/{id?}",
        defaults: new { controller = "Home", action = "Index" });
});

注意:这种方式需要控制器中的方法名称与 HTTP 动作匹配(如 Get、Post 等),适合简单场景,但不如属性路由灵活。

混合使用与高级配置

你可以同时使用属性路由和传统路由,系统会按注册顺序进行匹配。

常见技巧:

  • 版本化路由:通过前缀区分 API 版本
[Route("api/v1/[controller]")]
public class ProductsController : ControllerBase { }
  • 自定义约束:限制参数格式
[HttpGet("{id:int}")] // 只匹配整数
public IActionResult GetById(int id)
  • 多个路由映射同一方法
[HttpGet("products/all")]
[HttpGet("items")]
public IActionResult GetAll() => Ok();

基本上就这些。只要在启动时调用 MapControllers(),并在控制器上使用 [Route] 和 HTTP 方法特性,就能让 Web API 正确响应请求。属性路由是当前最佳实践,推荐优先使用。

以上就是.NET Web API如何配置路由(Routing)的详细内容,更多请关注其它相关文章!


# 并在  # 网站建设的区别与联系  # 拓之奇网络营销推广  # 家居媒体投放网站推广  # 玉溪seo公司参考火星  # 承德商城网站建设服务  # 女装最新火爆关键词排名  # 怀柔高端网站建设企业  # 苏州优化网站排名  # 廊坊企业开办网站建设  # 惠州seo优化套餐  # 相关文章  # app  # 推荐使用  # 两种  # 多个  # 你可以  # 如果你  # 渐进式  # 器上  # 器中  # .net  # 路由 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 抓大鹅解压小游戏 抓大鹅摸鱼解压入口  AO3官方在线访问地址 Archive of Our Own最新镜像合集  期待已久:小米17 Ultra、小米首款NAS本月登场  谷歌推RCS信息存档功能:公司可监控员工私密信息!  zookeeper 都有哪些功能?  Django模型中自动计算可用余额的实现方法  微博网页版直接访问 微博网页版账号管理快速入口  C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程  如何使用Go和Martini动态服务解码后的图片  Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程  J*aScript中高效管理与清空动态列表:避免循环陷阱  如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题  在Typer应用中优雅地处理和重组任意命令行参数  电脑屏幕颜色不舒服怎么办_Windows夜间模式与色彩校准教程【护眼技巧】  如何将HTML表格多行数据保存到Google Sheets  生成rdflib自定义SPARQL函数:参数匹配与实践指南  Spyder启动失败:字体文件权限拒绝错误解决方案  Mac怎么锁定备忘录_Mac备忘录加密设置教程  QQ网页版官方账号入口 QQ网页版网页版登录指南  在J*a中如何使用Stream.map转换元素_Stream映射操作解析  俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口  c++如何使用TBB库进行任务并行_c++ Intel线程构建模块  sublime如何只显示或隐藏特定类型文件_sublime侧边栏文件过滤  PyTorch模型训练效果不佳?深入剖析常见错误与调试技巧  顺丰快递查询系统 官方正版查询入口  哔哩哔哩忘记密码了怎么找回_哔哩哔哩密码找回方法  NVIDIA股价11月重挫12%:下月有望好转 但难回5万亿美元巅峰  DLsite中文平台入口 DLsite官网内容在线查看  照顾宝贝2小游戏免费秒玩入口  J*a里如何实现订单支付与库存同步功能_支付库存同步项目开发方法说明  护手霜蹭到袖口上了如何清洗? 怎样避免留下一圈油印?  抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站  css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染  Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询  QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址  Archive of Our Own官网直达 AO3最新可用地址一览  俄罗斯浏览器官网直达链接 俄罗斯浏览器最新在线入口导航  sublime如何优雅地处理行尾空格_sublime自动清理多余空白字符配置  中兴BladeV30怎样用测距估书架层高_iPhone中兴BladeV30测距估书架层高【家装参考】  2026年CSGO开箱网站推荐 CSGO开箱平台精选  UC浏览器网页版登录入口官网 电脑版网址入口  c++中为什么推荐使用using替代typedef_c++现代化类型别名  Golang并发任务中错误如何聚合_Golang goroutine error收集方式  《噬血代码2》新预告片发布 展示游戏剧情  C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入  解决J*aScript中重复选择项的确认对话框显示问题  小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】  铁路12306卧铺选择攻略 铁路12306下铺座位预定技巧  Pandas DataFrame 高效批量赋值:告别循环与笛卡尔积误区  J*aScript中高效清空DOM列表元素:解决for循环中断与任务管理问题 

搜索