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 中的属性路由。
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
此基本设置启用了 ASP.NET 中的属性路由。MapControllers
方法会扫描控制器和操作上的 Route 属性。
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。
来源
在本文中,我们探讨了 ASP.NET 8 中的路由。正确的路由设置对于创建可维护且用户友好的 Web 应用程序至关重要。