You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ASP.NET HttpPut原始参数配置Swagger的format、pattern和maxlength?

解决方案

方法1:给路由参数添加数据注解特性

直接在方法的参数上结合[FromRoute]和数据验证特性,这些特性会被Swagger自动识别并生成对应的文档信息:

[HttpPut("{servicenumber}/{date}/{page}/{fileVersion}")]
public async Task<IActionResult> GenerateServiceRecord(
    [FromRoute, StringLength(4, MaximumLength = 4)] // 配置max length
    [RegularExpression(@"^\d{4}$")] // 配置pattern
    string servicenumber,
    [FromRoute, DisplayFormat(DataFormatString = "yyyy-MM-dd")] // 配置date的format
    string date,
    string page,
    string fileVersion)
{
    // 业务逻辑实现
}
  • [StringLength]用来定义参数的最大长度
  • [RegularExpression]用来指定参数必须匹配的正则模式
  • [DisplayFormat]可以设置参数的格式规则
    这些特性不仅能同步到Swagger文档,还能自动完成请求参数的合法性校验。

方法2:自定义Swagger操作过滤器(复杂场景适用)

如果需要更灵活的规则配置,可以实现IOperationFilter手动修改Swagger的参数元数据:

  1. 创建过滤器类:
public class RouteParameterSchemaFilter : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        // 配置servicenumber的规则
        var servicenumberParam = operation.Parameters.FirstOrDefault(p => p.Name == "servicenumber");
        if (servicenumberParam != null)
        {
            servicenumberParam.Schema.MaxLength = 4;
            servicenumberParam.Schema.Pattern = @"^\d{4}$";
        }

        // 配置date的规则
        var dateParam = operation.Parameters.FirstOrDefault(p => p.Name == "date");
        if (dateParam != null)
        {
            dateParam.Schema.Format = "yyyy-MM-dd";
            dateParam.Schema.Pattern = @"^\d{4}-\d{2}-\d{2}$";
        }
    }
}
  1. 在Swagger配置中注册过滤器:
services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    c.OperationFilter<RouteParameterSchemaFilter>();
});

为什么之前的配置没生效?

你之前在路由模板里写的{servicenumber:length(4)}是ASP.NET Core的路由约束,它仅用于请求路由匹配时的参数校验,不会自动同步到Swagger的文档元数据中,所以Swagger文档不会显示这些规则。

内容的提问来源于stack exchange,提问作者Micah Armantrout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:04:57