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 路由结构。