ASP.NET Core中的路由约束

admin
admin
2022-02-28
分享:

ASP.NET Core中的路由约束

导航:

在此视频中,我们将讨论ASP.NET Core中的路由约束。 我们在这里讨论的概念可以在ASP.NET Core MVC Web应用程序,ASP.NET Core Web API和ASP.NET Core Razor PagesWeb应用程序中使用。

路由约束的用途是什么

路由约束是一种机制,用于过滤或限制不需要的参数请求,到应用程序中的控制器操作方法或者页面处理程序方法。

以下 Razor Pages需要id route参数的值。

@page "{id}"

它可以传递任何类型,比如:decimal、long、float、DateTime、double、guid、bool

当然URL路径的参数可以受数据类型和范围的约束。要指定路由约束,请包括冒号和约束。

在以下示例中,id route参数值必须为整数类型。如果您传递字母而不是整数值,则会出现404错误。

@page "{id:int}"

路由约束参数

一些约束也接受参数。最小约束可用于指定最小整数值。在我们的情况下,学生ID必须等于或大于1。

@page "{id:min(1)}"

多个路由约束

约束可以使用冒号组合多个约束。以下示例确保id值为1到5之间的整数。

@page "{id:min(1):max(5)}"

使用范围约束也可以实现相同的目的。范围约束采用2个参数,允许最小和最大值范围。

@page "{id:range(1,5)}"

可选参数的路由约束

在以下示例中,路由参数id是可选的。为了使其可选,我们在route参数的末尾添加了一个问号。

@page "{id?}"

要使route参数成为可选参数,当您指定约束时,必须在所有约束的末尾添加问号。

@page "{id:range(1,5)?}"

如果在route参数的名称之后立即包含它,则会得到RoutePatternException

@page "{id?:range(1,5)}"

错误信息如下:

RoutePatternException: The route parameter name 'id?' is invalid. Route parameter names must be non-empty and cannot contain these characters: '{', '}', '/'. The '?' character marks a parameter as optional, and can occur only at the end of the parameter. The '*' character marks a parameter as catch-all, and can occur only at the start of the parameter.

翻译为中文:

RoutePatternException:路由参数名称'id?' 是无效的。路由参数名称必须为非空并且不能包含以下字符:“ {”,“}”,“ /”。'?' 字符将参数标记为可选参数,并且只能在参数末尾出现。“ *”字符将参数标记为全部,并且只能在参数开头出现。

常见的内置路由约束

约束 用例 使用
int 仅允许整数值
alpha 字符串只能包含字母
minlength(值) {firstName:minlength(5)} 字符串必须至少5个字符
maxlength(值) {firstName:maxlength(10)} 字符串不能超过10个字符
长度(最小,最大) {firstName:length(5,10)} 字符串长度必须至少为5个字符且不超过10个字符
长度 {firstName:length(10)} 字符串长度必须恰好为10个字符
最小值(值) {id:min(1)} 整数值必须至少为1
最大(值) {id:max(100)} 整数值不得超过100
范围(最小,最大) {id:range(1,100)} 整数值必须介于1到100(含)之间
正则表达式(表达式) 字符串必须与正则表达式指定的模式匹配

同样,其他内置数据类型(例如,decimal, float, double, datetime, bool, long, guid)也可以用作约束)

如果这些内置约束均不满足您的要求,则可以创建一个自定义约束。我们将在即将到来的视频中讨论自定义约束。