ASP.NET 8中路由工具的改进
原文信息
文章:ASP.NET Core Route Tooling Enhancements in .NET 8
作者:James Newton-King(.NET首席软件工程师)
链接:https://devblogs.microsoft.com/dotnet/aspnet-core-route-tooling-dotnet-8/
发布时间:2023年4月3日
ASP.NET Core建立在路由之上。最小 API、Web API、Razor 页面和 Blazor 都使用路由来自定义 HTTP 请求映射到代码的方式。
在 .NET 8 中,我们正在投资一套新功能,以使路由更易于学习和使用。其中包括:
- 路由语法突出显示
- 自动完成参数和路由名称
- 自动完成路由约束
- 路线分析器和修复程序
- 支持最小 API、Web API 和 Blazor
组合在一起,我们将这些新功能称为路径工具。围绕路线的深度工具集成是 ASP.NET Core 团队的新领域,我们对路由工具为 ASP.NET 核心开发人员带来的生产力改进感到兴奋。
# 路由语法突出显示
ASP.NET Core 具有稳定、定义明确的路由语法。它支持多种功能:
- 参数–
/product/{id}
- 参数约束–
/product/{id:int}
- 参数默认值–
/{page=Home}
- 可选参数–
/files/{filename}.{ext?}
- 包罗万象的参数–
/blog/{*slug}
- 令牌替换–
/api/[controller]/[action]
现在,IDE 中突出显示了路由的不同部分,使路由更易于理解。语法突出显示和在生成时提醒您路由语法错误的分析器应该使开发人员更容易使用路由。
# 自动完成参数和路由名称
一个流行的 ASP.NET 核心功能是路由值绑定。当方法和路由参数的名称在最小和 Web API 上匹配时,该值会自动传递给该方法。
路由工具添加了自动完成功能,以加快 API 编写速度并减少路由和方法参数名称之间的拼写错误。
# 自动完成路由约束
ASP.NET 核心包括 18 个内置路由约束 (opens new window)。路由约束限制路由接受的值。例如,限制为仅接受整数。/products/{id:int}id
路由约束的一小部分示例:
int
–匹配任何整数bool
–匹配true
或false
datetime
–匹配有效值DateTime
minlength(value)
–字符串必须至少为指定的字符数maxlength(value)
–字符串不得超过指定的字符数alpha
–字符串必须由一个或多个字母字符组成regex(expression)
–字符串必须与正则表达式匹配
有很好的约束文档,但查找文档仍然很痛苦。路径工具通过添加约束自动完成来修复此问题。现在,IDE 中提供了约束列表。
# 路线分析器和修复程序
我们认真考虑了开发人员在使用路由时遇到的常见问题,并添加了许多新的分析器和修补程序来解决这些问题并使路由更易于使用。
新的分析仪和修复器包括:
# 路由语法分析器
编写和编译应用时,会实时报告路由语法错误。一些常见的语法错误包括:
- 忘记用 : 关闭参数:
}/products/{id:alpha
- 多个同名路由参数:
/api/{version}/product/{version}
- 捕获全部参数之后的分段:
/blog/{*slug}/{date}
在编写路线时接收反馈是一项强大的功能。以前,运行应用是测试路由是否有效的唯一方法。反复试验并不是一种伟大或富有成效的体验。对于第一次学习路由的开发人员来说,试错尤其令人沮丧。
我们对实时路由反馈将为开发人员提供的生产力提升感到兴奋!
# 不匹配的参数可选性分析器和修复器
路由支持可选参数。例如,匹配项和 ./blog/archive/{date?}/blog/archive/blog/archive/2023-4-1
如果可选参数绑定到不可为空的方法参数(如上例所示),则没有任何内容要绑定到该参数。 必须具有值,因此 ASP.NET 核心会引发错误。DateTimeDateTime
不匹配的参数可选性分析器会检测并警告这种情况。修复程序会自动将方法参数修改为可为空:
app.MapGet("/blog/archive/{date?}", (DateTime? date) =>
{
return (date == null) ? GetAllBlogPosts() : GetBlogPostsByDate(date.Value);
});
# 模棱两可的最小 API 和 Web API 路由分析器
假设多个路由与同一 URL 匹配。ASP.NET Core 不知道要使用哪个路由并引发错误。编写模棱两可的路由很容易出错,尤其是当您不熟悉路由时。
app.MapGet("/product/{name}", (string name) => ...);
app.MapGet("/product/{id}", (int id) => ...);
前面的最小 API 看起来可以工作,因为路由参数名称和 API 类型不同。实际上,这些路由在功能上是相同的,并且会产生不明确的匹配。
不明确的路由分析器检测常见的不明确匹配并提供警告。此情况下的解决方法是添加路由约束:
app.MapGet("/product/{name:alpha}", (string name) => ...);
app.MapGet("/product/{id:int}", (int id) => ...);
# 支持最少的 API、Web API 和 Blazor
最小 API、Web API、Razor 页面、Blazor 等使用路由。路径工具支持您在 Core 中使用 ASP.NET 路径的所有位置。
路由工具基于 Roslyn 构建,功能会根据您的 IDE 自动亮起。
# 立即试用
路由工具现已在 .NET 8 预览版中推出。今天就试试吧:
- 下载最新的 .NET 8 预览版 (opens new window)。
- 启动 Visual Studio 2022 (opens new window) 并使用适用于 .NET 8.0 的 ASP.NET - Core Empty 模板创建新网站。
- 打开并开始添加新的最小 API。例如。
Program.csapp.MapGet("/- product/{id:int}", (int id) => ...)
通过在 GitHub (opens new window) 上提交问题,让我们知道您对这些新功能的看法。
感谢您试用 ASP.NET 核心和路由工具!