新闻中心

ASP.NET Core 中的自定义路由约束如何创建?

2025-09-26
浏览次数:
返回列表
创建自定义路由约束需实现IRouteConstraint接口,注册到ConstraintMap,并在路由模板中使用,如{param:even},以精确控制匹配逻辑,常见于格式校验场景。

asp.net core 中的自定义路由约束如何创建?

在 ASP.NET Core 中创建自定义路由约束,可以让你更精确地控制 URL 路由匹配逻辑。比如你希望某个路由参数必须是有效的邮政编码、手机号或特定格式的字符串,就可以通过自定义约束实现。

1. 创建自定义路由约束类

自定义路由约束需要实现 IRouteConstraint 接口。该接口只有一个方法 Match,用于判断参数是否符合规则。

例如,创建一个检查参数是否为偶数的约束:

public class EvenNumberConstraint : IRouteConstraint
{
    public bool Match(
        HttpContext httpContext,
        IRouter route,
        string routeKey,
        RouteValueDictionary values,
        RouteDirection routeDirection)
    {
        if (values.TryGetValue(routeKey, out var value))
        {
            var parameter = value?.ToString();
            if (int.TryParse(parameter, out int number))
            {
                return number % 2 == 0;
            }
        }
        return false;
    }
}

2. 注册自定义约束

Program.csStartup.cs 中注册这个约束,使其可以在路由模板中使用。

Program.cs 的服务配置中添加:

builder.Services.AddSingleton();

// 或者更推荐的方式:注册为具名约束 builder.Services.Configure(options => {     options.ConstraintMap.Add("even", typeof(Even)Constraint)); });

3. 在路由中使用自定义约束

注册后,你可以在控制器路由或 Razor Pages 中使用这个约束。

Openflow Openflow

一键极速绘图,赋能行业工作流

Openflow 88 查看详情 Openflow

例如,在控制器中:

[Route("api/values/{id:even}")] public IActionResult GetById(int id) {     return Ok(new { Id = id }); }

这样,只有当 id 是偶数时,该路由才会匹配。例如:

  • /api/values/4 → 匹配
  • /api/values/3 → 404

也可以用在 MapControllerRouteMapGet 等终结点配置中:

endpoints.MapControllerRoute(     name: "default",     pattern: "{controller=Home}/{action=Index}/{id:even?}");

常见应用场景

自定义约束适合以下场景:

  • 验证参数是否为 GUID
  • 检查是否是手机号、邮箱、邮政编码等格式
  • 限制值在某个枚举范围内(如 {action:in(create,edit,delete)})
  • 日期格式校验

基本上就这些。只要实现接口、注册、并在路由中使用,就能灵活控制路由匹配行为。不复杂但容易忽略的是注册步骤——别忘了加到 ConstraintMap 里。

以上就是ASP.NET Core 中的自定义路由约束如何创建?的详细内容,更多请关注其它相关文章!


# 个性化设置  # 番禺seo网络营销推广哪个好  # 广告 模型网站推广方案  # 邢台手机网站建设报价  # 包头网站seo  # 聊城集团网站建设公司  # 南开网站推广营销招聘  # 北京公司网站建设排名  # seo舞蹈原版  # 图片像素优化网站  # 厦门学营销推广  # 你可以  # 让你  # 编码  # 无线路由器  # 的是  # 一拍  # 拍了拍  # 并在  # 验证码  # 自定义  # .net  # 邮箱  # 路由  # ai 


相关栏目: 【 行业资讯67740 】 【 技术百科0 】 【 网络运营39195


相关推荐: 5r是多少钱  固态硬盘 如何分区  苹果16哪些型号好用  计数器上power是什么意思  如何检测固态硬盘温度  苹果16自带配件有哪些  win7如何打开命令行窗口  openwrt有哪些功能  如何把u盘改成固态硬盘  春运抢票如何抢连坐的票  学typescript需要多久  油烟机上的power是什么意思  市盈率中的19a是什么意思  什么是typescript  如何用命令下载服务器网站  酷我音乐怎么改每日推荐 酷我音乐每日推荐修改方法  如何查找固态硬盘  手机拍显示屏有条纹怎么去除  typescript如何开发  如何用好typescript  j*a中如何创建列表数组  如何查看固态硬盘速度  台达变频器power灯是什么意思  折叠屏手机哪个卖得最好  闪光灯power闪烁是什么意思  买的5g手机但是没有5g网络怎么办  安卓手机怎么打开5g  j*a整形怎么转数组  如何安装大华固态硬盘  typescript的语法格式是什么  typescript为什么能运行  mac如何使用vi命令  显示器power接口是什么意思  单片机怎么加死循环  如何在一串数字前面去掉四位数的命令  得物怎样降低手续费 得物如何降低手续费教程  单片机怎么判定高电平  ao3镜像网站哪个好  空调控制面板power灯一直亮是什么意思  旧固态硬盘如何卖出  苹果电脑如何输入命令  如何判断固态硬盘端口  一年多少周  如何学好typescript  域名解析后为什么要进行域名备案  2026年将会大爆发的15个新科技  win7怎么取消360显示的壁纸  如何修改cad命令  新版路由器如何设置路由命令  如何用命令打开光驱 

搜索