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

.NET Core中Swagger未识别Model Request必填属性的问题排查

问题分析与解决方案

你遇到的问题是Swagger没有识别出ArticulosRequestModel中Filtro属性的[Required]标记,核心原因是Swashbuckle(生成Swagger文档的库)默认不会自动解析模型里的DataAnnotations属性,需要你显式配置来启用这个功能。

下面是具体的解决步骤:

1. 确认依赖包与命名空间

首先确保你引用的是正确的[Required]属性:它来自System.ComponentModel.DataAnnotations命名空间,不要引用错其他库的同名属性。你的模型代码看起来没问题,可再确认一下:

using System.ComponentModel.DataAnnotations;

public class ArticulosRequestModel {
    [Required(ErrorMessage = "Filter is required.")]
    [FromQuery(Name = "filtro")]
    public string Filtro { get; set; }

    [FromQuery(Name = "activos")]
    public int Activos { get; set; }
}

2. 配置Swashbuckle启用DataAnnotations解析

在你的Program.cs(.NET 6+)或Startup.cs(.NET 5及更早)中,找到Swagger的配置代码,添加EnableAnnotations()方法来让Swashbuckle识别模型的DataAnnotations:

.NET 6+ Program.cs示例:

var builder = WebApplication.CreateBuilder(args);

// 添加控制器服务
builder.Services.AddControllers();

// 配置Swagger
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "Tu API", Version = "v1" });
    // 启用DataAnnotations解析,让Swagger识别[Required]等属性
    c.EnableAnnotations();
});

var app = builder.Build();

// 启用Swagger中间件
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthorization();
app.MapControllers();
app.Run();

.NET 5及更早 Startup.cs示例:

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "Tu API", Version = "v1" });
        c.EnableAnnotations(); // 关键配置
    });
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseSwagger();
        app.UseSwaggerUI();
    }
    // ...其他中间件配置
}

3. (可选)升级Swashbuckle版本

如果你的Swashbuckle.AspNetCore版本比较旧,可能存在对DataAnnotations支持不完善的情况,建议升级到最新稳定版本,可以通过NuGet包管理器或命令行更新:

Update-Package Swashbuckle.AspNetCore

完成以上配置后,重新启动你的API项目,Swagger文档里的filtro参数就会被标记为必填项了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 14:22:35