ASP.NET RoutePrefix
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 RoutePrefix 属性。此属性通过定义通用的路由前缀来帮助组织 API 端点。
ASP.NET 是一个强大的用于构建 Web 应用程序和 API 的框架。RoutePrefix 通过集中化通用的路径段来简化路由管理。
基本定义
RoutePrefix 是 ASP.NET Web API 中的一个属性,用于指定控制器内所有操作的通用路由前缀。它减少了路由模板中的重复。
当应用于控制器时,RoutePrefix 定义了该控制器中所有路由的基路径。然后,单个操作方法可以指定相对路径。
RoutePrefix 与属性路由配合使用,可创建简洁、一致的 API 端点。对于版本化 API 或分组资源尤其有用。
ASP.NET RoutePrefix 示例
以下示例演示了一个使用 RoutePrefix 组织与产品相关的端点的 Web API 控制器。
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
此基本设置启用了 ASP.NET 8 中的属性路由。MapControllers
方法会激活诸如 RoutePrefix 之类的路由属性。
using Microsoft.AspNetCore.Mvc; [ApiController] [RoutePrefix("api/v1/products")] public class ProductsController : ControllerBase { private static List<Product> _products = new() { new Product(1, "Laptop", 999.99m), new Product(2, "Mouse", 19.99m), new Product(3, "Keyboard", 49.99m) }; [HttpGet] [Route("")] public IActionResult GetAllProducts() { return Ok(_products); } [HttpGet] [Route("{id:int}")] public IActionResult GetProductById(int id) { var product = _products.FirstOrDefault(p => p.Id == id); if (product == null) return NotFound(); return Ok(product); } [HttpGet] [Route("category/{categoryId}")] public IActionResult GetProductsByCategory(int categoryId) { var products = _products.Where(p => p.CategoryId == categoryId); return Ok(products); } [HttpPost] [Route("")] public IActionResult AddProduct([FromBody] Product product) { _products.Add(product); return CreatedAtAction(nameof(GetProductById), new { id = product.Id }, product); } } public record Product(int Id, string Name, decimal Price, int CategoryId = 1);
此控制器使用 RoutePrefix
将基路径设置为 api/v1/products
。所有操作路由都相对于此前缀。
GetAllProducts
方法与前缀组合形成 api/v1/products
。GetProductById
方法将 /{id}
添加到前缀。
GetProductsByCategory
展示了如何使用其他路径段来扩展前缀。HttpPost
方法演示了 RoutePrefix 可与所有 HTTP 方法配合使用。
诸如 {id:int}
之类的路由约束可确保参数类型匹配。GetAllProducts
上的空 [Route("")]
直接附加到前缀。
来源
在本文中,我们探讨了 ASP.NET 8 中的 RoutePrefix 属性。这项有价值的功能有助于创建组织良好、易于维护的 API 路由结构。