Easy-DotNET Easy-DotNET
🏠首页
  • 知识地图
  • 源码脑图

    • 总览
    • Program
    • WebApplication
    • Host主机
    • WebHost主机
    • 依赖注入
    • Autofac
    • Middleware中间件
    • RateLimiter限制速率
    • 响应缓存、请求解压缩
  • 设计初衷
  • 克隆
  • 类型转换
  • 日期时间
  • IO流
  • 工具类
  • 语言特性
  • 集合类
  • Codec编码
  • 文本操作
  • 数学
  • 图片
  • 网络
  • Emoji表情
  • C# 12
  • C# 11
  • C# 10
  • C# 9.0
  • C# 8.0
  • C# 早期版本
  • C# 教程
  • ORM
  • 定时任务
  • 日志
  • 认证与授权
  • Swagger
  • 对象映射
  • 熔断重试限流
  • 缓存
  • 注册发现
  • 网关
  • GraphQL
  • 更多
  • Docker

    • 简介
    • Adminer
    • Apisix
    • Apollo
    • Cassandra
    • Cerebro
    • ClickHouse
    • Consul
    • EasyMock
    • Elasticsearch
    • Emqx
    • FastDFS
    • Flink
    • Gitlab
    • Jenkins
    • Jrebel
    • MariaDB
    • MySQL
    • Percona
    • Phpmyadmin
    • PostgreSQL
    • Redis
  • Linux

    • 查看Linux系统信息
    • CentOS7调整磁盘分区
    • IO压测
    • 图形化监控工具Cockpit
  • 总览
  • 列表

    • 算法数据结构
    • API
    • 应用框架
    • 应用模板
    • 操作系统
    • 工作流
    • 入门套件
    • 示例
    • 人工智能
    • 程序集
    • Assets
    • 认证授权
    • Blazor
    • 区块链
    • 书籍
    • 自动构建
    • 报表
    • 缓存
    • 日历
    • 聊天
    • CLI
    • CLR
    • CMS
    • 代码分析和指标
    • 代码片段
    • 压缩
    • 持续集成
    • 密码学
    • 数据库
    • 数据库驱动
    • 日期时间
    • 反编译
    • 部署
    • DirectX
    • 分布式计算
    • DLR
    • 文档
    • 电商支付
    • 模拟器
    • 环境管理
    • ETL
    • 事件消息
    • Exception
    • 扩展
    • 函数式编程
    • 游戏引擎
    • GIS
    • Git工具
    • 绘图
    • GraphQL
    • GUI
    • HTML-CSS
    • HTTP
    • IDE
    • 图片处理
    • 安装工具
    • 交互式编程
    • 国际化
    • 互操作性
    • IoC
    • JS引擎
    • 日志
    • 机器学习和数据科学
    • Markdown
    • 邮件
    • 数学
    • 媒体
    • 指标
    • 微型框架
    • 最小化器
    • MVVM
    • 网络
    • 对象映射
    • Office
    • OpenAI
    • ORM
    • 包管理器
    • PDF
    • 性能分析工具
    • 协议
    • 推送通知
    • SQL构建器
    • 消息队列
    • RPC
    • 响应式编程
    • 实时通信
    • 正则表达式
    • 任务调度
    • SDK和API
    • 搜索引擎
    • 序列化
    • SMS
    • 状态机
    • 静态站点生成
    • 强命名
    • 风格指南
    • 模板引擎
    • 测试
    • 工具
    • 交易
    • UI自动测试
    • Visual Studio 插件
    • Web浏览器
    • Web框架
    • WebServers
    • WebSocket
    • Windows服务
    • WPF
    • 解析器
    • 源码生成
    • 其他
    • 资源
  • AspNetCore面试题
  • Elasticsearch面试题
  • MongoDB面试题
  • MySql面试题
  • Nginx面试题
  • RabbitMQ面试题
  • Redis面试题
  • 设计模式
  • 微服务
🧑‍💻.NET Blog
GitHub (opens new window)
🏠首页
  • 知识地图
  • 源码脑图

    • 总览
    • Program
    • WebApplication
    • Host主机
    • WebHost主机
    • 依赖注入
    • Autofac
    • Middleware中间件
    • RateLimiter限制速率
    • 响应缓存、请求解压缩
  • 设计初衷
  • 克隆
  • 类型转换
  • 日期时间
  • IO流
  • 工具类
  • 语言特性
  • 集合类
  • Codec编码
  • 文本操作
  • 数学
  • 图片
  • 网络
  • Emoji表情
  • C# 12
  • C# 11
  • C# 10
  • C# 9.0
  • C# 8.0
  • C# 早期版本
  • C# 教程
  • ORM
  • 定时任务
  • 日志
  • 认证与授权
  • Swagger
  • 对象映射
  • 熔断重试限流
  • 缓存
  • 注册发现
  • 网关
  • GraphQL
  • 更多
  • Docker

    • 简介
    • Adminer
    • Apisix
    • Apollo
    • Cassandra
    • Cerebro
    • ClickHouse
    • Consul
    • EasyMock
    • Elasticsearch
    • Emqx
    • FastDFS
    • Flink
    • Gitlab
    • Jenkins
    • Jrebel
    • MariaDB
    • MySQL
    • Percona
    • Phpmyadmin
    • PostgreSQL
    • Redis
  • Linux

    • 查看Linux系统信息
    • CentOS7调整磁盘分区
    • IO压测
    • 图形化监控工具Cockpit
  • 总览
  • 列表

    • 算法数据结构
    • API
    • 应用框架
    • 应用模板
    • 操作系统
    • 工作流
    • 入门套件
    • 示例
    • 人工智能
    • 程序集
    • Assets
    • 认证授权
    • Blazor
    • 区块链
    • 书籍
    • 自动构建
    • 报表
    • 缓存
    • 日历
    • 聊天
    • CLI
    • CLR
    • CMS
    • 代码分析和指标
    • 代码片段
    • 压缩
    • 持续集成
    • 密码学
    • 数据库
    • 数据库驱动
    • 日期时间
    • 反编译
    • 部署
    • DirectX
    • 分布式计算
    • DLR
    • 文档
    • 电商支付
    • 模拟器
    • 环境管理
    • ETL
    • 事件消息
    • Exception
    • 扩展
    • 函数式编程
    • 游戏引擎
    • GIS
    • Git工具
    • 绘图
    • GraphQL
    • GUI
    • HTML-CSS
    • HTTP
    • IDE
    • 图片处理
    • 安装工具
    • 交互式编程
    • 国际化
    • 互操作性
    • IoC
    • JS引擎
    • 日志
    • 机器学习和数据科学
    • Markdown
    • 邮件
    • 数学
    • 媒体
    • 指标
    • 微型框架
    • 最小化器
    • MVVM
    • 网络
    • 对象映射
    • Office
    • OpenAI
    • ORM
    • 包管理器
    • PDF
    • 性能分析工具
    • 协议
    • 推送通知
    • SQL构建器
    • 消息队列
    • RPC
    • 响应式编程
    • 实时通信
    • 正则表达式
    • 任务调度
    • SDK和API
    • 搜索引擎
    • 序列化
    • SMS
    • 状态机
    • 静态站点生成
    • 强命名
    • 风格指南
    • 模板引擎
    • 测试
    • 工具
    • 交易
    • UI自动测试
    • Visual Studio 插件
    • Web浏览器
    • Web框架
    • WebServers
    • WebSocket
    • Windows服务
    • WPF
    • 解析器
    • 源码生成
    • 其他
    • 资源
  • AspNetCore面试题
  • Elasticsearch面试题
  • MongoDB面试题
  • MySql面试题
  • Nginx面试题
  • RabbitMQ面试题
  • Redis面试题
  • 设计模式
  • 微服务
🧑‍💻.NET Blog
GitHub (opens new window)
npm
  • 产品发布

    • .NET Blog
    • ASP.NET 8中对认证和身份的改进
    • ASP.NET 8中路由工具的改进
      • 路由语法突出显示
      • 自动完成参数和路由名称
      • 自动完成路由约束
      • 路线分析器和修复程序
        • 路由语法分析器
      • 不匹配的参数可选性分析器和修复器
        • 模棱两可的最小 API 和 Web API 路由分析器
      • 支持最少的 API、Web API 和 Blazor
      • 立即试用
    • ASP.NET 8改进多平台容器支持
目录

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 中突出显示了路由的不同部分,使路由更易于理解。语法突出显示和在生成时提醒您路由语法错误的分析器应该使开发人员更容易使用路由。

intro

# 自动完成参数和路由名称

一个流行的 ASP.NET 核心功能是路由值绑定。当方法和路由参数的名称在最小和 Web API 上匹配时,该值会自动传递给该方法。

路由工具添加了自动完成功能,以加快 API 编写速度并减少路由和方法参数名称之间的拼写错误。

rt-autocomplete

# 自动完成路由约束

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}

在编写路线时接收反馈是一项强大的功能。以前,运行应用是测试路由是否有效的唯一方法。反复试验并不是一种伟大或富有成效的体验。对于第一次学习路由的开发人员来说,试错尤其令人沮丧。

我们对实时路由反馈将为开发人员提供的生产力提升感到兴奋!

rt-analyzers

# 不匹配的参数可选性分析器和修复器

路由支持可选参数。例如,匹配项和 ./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 路径的所有位置。

supported

路由工具基于 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 核心和路由工具!

上次更新: 2023/04/26, 22:10:06
ASP.NET 8中对认证和身份的改进
ASP.NET 8改进多平台容器支持

← ASP.NET 8中对认证和身份的改进 ASP.NET 8改进多平台容器支持→

Theme by Vdoing | Copyright © 2019-2024 一个大西瓜 | MIT License | 苏ICP备2023013501号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式