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 应用程序至关重要。