ZetCode

ASP.NET 路由

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的路由。路由是用于将传入请求映射到 Web 应用程序中的控制器操作的基础。

ASP.NET 路由支持干净的 URL 和灵活的请求处理。它对于在 .NET 8 中构建 RESTful API 和 MVC 应用程序至关重要。

基本定义

ASP.NET 中的路由是将传入的 HTTP 请求匹配到可执行终结点(操作)的过程。它会检查 URL 和 HTTP 方法以确定适当的处理程序。

ASP.NET 支持两种路由方法:约定路由和属性路由。属性路由通过直接在控制器和操作上定义的路由模板提供更多控制。

Route 属性可以应用于控制器和操作级别。它接受定义 URL 模式和参数约束的模板。

路由参数用大括号 {} 括起来。它们可以具有约束和默认值。ASP.NET 会自动将它们绑定到操作方法的参数。

ASP.NET 路由示例

以下示例演示了 ASP.NET 8 Web API 中的属性路由。

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

var app = builder.Build();

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

此基本设置启用了 ASP.NET 中的属性路由。MapControllers 方法会扫描控制器和操作上的 Route 属性。

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

[ApiController]
[Route("api/books")]
public class BooksController : ControllerBase
{
    private static List<Book> _books = new()
    {
        new Book(1, "The Hobbit", "J.R.R. Tolkien"),
        new Book(2, "Dune", "Frank Herbert"),
        new Book(3, "Neuromancer", "William Gibson")
    };

    [HttpGet]
    public IActionResult GetAllBooks()
    {
        return Ok(_books);
    }

    [HttpGet("{id:int}")]
    public IActionResult GetBookById(int id)
    {
        var book = _books.FirstOrDefault(b => b.Id == id);
        if (book == null) return NotFound();
        return Ok(book);
    }

    [HttpGet("author/{authorName}")]
    public IActionResult GetBooksByAuthor(string authorName)
    {
        var books = _books.Where(b => 
            b.Author.Contains(authorName, StringComparison.OrdinalIgnoreCase));
        return Ok(books);
    }

    [HttpGet("search")]
    public IActionResult SearchBooks([FromQuery] string term)
    {
        var results = _books.Where(b => 
            b.Title.Contains(term, StringComparison.OrdinalIgnoreCase) ||
            b.Author.Contains(term, StringComparison.OrdinalIgnoreCase));
        return Ok(results);
    }
}

public record Book(int Id, string Title, string Author);

此控制器演示了各种路由场景。基本路由 api/books 在控制器级别定义。

第一个操作响应基本路由上的 GET 请求。第二个操作包含一个带有类型约束的路由参数 {id:int}

第三个操作展示了更复杂的路由模式 author/{authorName}。第四个操作使用查询参数来实现搜索功能。

路由中的类型约束(:int)可确保参数值与预期类型匹配。ASP.NET 会为参数类型无效的请求返回 404。

该示例展示了如何将路由模板与 HTTP 方法属性结合使用,以创建具有有意义 URL 的干净、RESTful API。

来源

Microsoft ASP.NET 路由文档

在本文中,我们探讨了 ASP.NET 8 中的路由。正确的路由设置对于创建可维护且用户友好的 Web 应用程序至关重要。

作者

我叫 Jan Bodnar,是一名充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写超过 1400 篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 ASP.NET 教程