如何为自定义dotnet new模板的aks参数添加正则格式校验?
解决方案:通过自定义模板脚本实现参数格式校验
Dotnet new模板的原生template.json参数定义确实没有内置的正则校验功能,但你可以通过**自定义C#脚本(.csx)**来实现aks参数的lower-kebab-case格式强制校验,当输入不符合规则时直接终止模板创建并抛出清晰的错误提示。
下面是具体的实现步骤:
1. 创建参数校验脚本
在你的模板项目的.template.config文件夹下,新建一个名为ValidateParameters.csx的C#脚本,内容如下:
using System; using System.Text.RegularExpressions; // 从模板上下文获取传入的aks参数值 var aksParamValue = Context.Parameters["aks"]; // 定义lower-kebab-case的正则规则:仅允许小写字母、数字,用连字符分隔,不能以连字符开头/结尾 var validKebabCasePattern = new Regex(@"^[a-z0-9]+(-[a-z0-9]+)*$"); if (!validKebabCasePattern.IsMatch(aksParamValue)) { throw new InvalidOperationException( $"错误:参数 'aks' 必须符合lower-kebab-case格式(示例:my-awesome-api-123)。当前输入值:{aksParamValue}" ); }
2. 修改template.json引入脚本
打开.template.config/template.json,添加preActions配置,让模板在生成文件之前执行这个校验脚本:
{ // 保留你原有的模板配置(如name, shortName等) "preActions": [ { "actionId": "210D431B-A78B-4D2F-B762-4ED3E3EA9025", "args": { "scriptPath": ".template.config/ValidateParameters.csx" }, "continueOnError": false } ], "parameters": { "aks": { "type": "parameter", "datatype": "string", "replaces": "blipapitemplate", "isRequired": true, "fileRename": "blipapitemplate" } // 其他参数配置... } }
actionId是dotnet模板内置的执行CSX脚本的固定ID,无需修改continueOnError: false确保校验失败时直接终止模板创建,不会生成不符合要求的文件
3. 测试效果
当用户输入不符合lower-kebab-case格式的值时(比如MyApi、my_api、My-Api),模板会立即抛出错误并终止:
Error: 错误:参数 'aks' 必须符合lower-kebab-case格式(示例:my-awesome-api-123)。当前输入值:MyApi
只有输入符合规则的值(比如my-api、user-service-v2)时,模板才会正常生成项目。
这个方案是官方支持的模板扩展方式,你可以根据需要扩展脚本逻辑,实现更复杂的参数校验规则。
内容的提问来源于stack exchange,提问作者Lucas Mundim
相关产品推荐
相关产品推荐

