ASP.NET Core中的路由约束
admin
2022-02-28ASP.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)也可以用作约束)
如果这些内置约束均不满足您的要求,则可以创建一个自定义约束。我们将在即将到来的视频中讨论自定义约束。