ZetCode

ASP.NET FromRoute

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 FromRoute 属性。此属性对于将路由参数绑定到 Web API 中的操作方法参数至关重要。

ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。FromRoute 属性简化了从 URL 路由绑定参数的过程。

基本定义

ASP.NET 中的 FromRoute 属性将操作方法参数绑定到路由值。它从 URL 路径提取值并将其绑定到方法参数。

当应用于参数时,FromRoute 指定参数的值应来自路由数据。它通常与 HttpGet 和 HttpDelete 一起使用。

FromRoute 是 ASP.NET 模型绑定系统的一部分。它提供了对参数值来源的显式控制,使代码更易于维护。

ASP.NET FromRoute 示例

以下示例演示了一个使用 FromRoute 从路由参数检索产品的 Web API 控制器。

Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();

var app = builder.Build();

app.MapControllers();
app.Run();

这设置了一个基本的 ASP.NET 应用程序,并支持控制器。MapControllers 方法为控制器启用属性路由。

Controllers/ProductsController.cs
using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
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("{id}")]
    public IActionResult GetProductById([FromRoute] int id)
    {
        var product = _products.FirstOrDefault(p => p.Id == id);
        if (product == null) return NotFound();
        return Ok(product);
    }

    [HttpGet("category/{categoryId}/products")]
    public IActionResult GetProductsByCategory(
        [FromRoute(Name = "categoryId")] int catId)
    {
        // In a real app, we would filter by category
        return Ok(_products);
    }
}

public record Product(int Id, string Name, decimal Price);

此控制器演示了两种不同的 FromRoute 场景。第一个方法将 id 参数绑定到路由模板 {id}

第二个方法展示了如何将与操作参数名称不同的路由参数绑定。Name 属性指定要绑定的路由参数名称。

ApiController 属性为无效模型启用自动 HTTP 400 响应。Route 设置此控制器中所有操作的基路径。

该示例展示了 FromRoute 如何提供对路由参数的显式绑定。与隐式绑定相比,这使得代码更具可读性和可维护性。

来源

Microsoft ASP.NET Web API 文档

在本文中,我们探讨了 ASP.NET 8 中的 FromRoute 属性。这项强大的功能提供了对 Web API 中路由参数绑定的显式控制。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面有十多年的经验。

列出所有 ASP.NET 教程