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

如何在C# .NET的HTTP POST请求中避免提交空字符串

解决方案

问题原因

你遇到的是Swashbuckle(ASP.NET Core配套的Swagger生成工具)的默认行为:它会给可空字符串类型的属性自动生成"string"作为示例值,而类属性的默认值(比如= string.Empty)不会被Swagger自动识别并应用到示例中。

方法一:通过特性单独指定示例值

先安装Swashbuckle.AspNetCore.Annotations NuGet包,然后在Dto的每个字符串属性上添加[SwaggerSchema]特性,指定空字符串作为示例:

using Swashbuckle.AspNetCore.Annotations;

public class AddQuoteDto
{
    [Required(ErrorMessage = "Quote is required")]
    [SwaggerSchema(Example = "")]
    public string? Quote { get; set; } 

    [Required(ErrorMessage = "Author is required")]
    [SwaggerSchema(Example = "")]
    public string? Author { get; set; }

    [Required(ErrorMessage = "Tags are required")]
    [SwaggerSchema(Example = "")]
    public string? Tags { get; set; }
}

方法二:全局配置Swagger示例规则

如果不想给每个属性单独加特性,可以在Program.cs中全局配置Swagger的Schema生成规则,让所有可空字符串的默认示例为空:

using Microsoft.OpenApi.Models;

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "你的API名称", Version = "v1" });

    // 配置字符串类型的默认示例为空
    c.SchemaGeneratorOptions.ConfigureSchemaForType<string>(schema =>
    {
        schema.Example = new OpenApiString("");
    });

    // 针对可空字符串单独配置(按需选择)
    c.SchemaGeneratorOptions.ConfigureSchemaForType<string?>(schema =>
    {
        schema.Example = new OpenApiString("");
    });
});

方法三:启用Swagger读取类属性默认值

从Swashbuckle.AspNetCore 6.0+版本开始,可以配置让Swagger读取类属性的默认值作为示例,这样你之前设置的= string.Empty就会生效:

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "你的API名称", Version = "v1" });
    
    // 启用读取属性默认值作为示例
    c.SchemaGeneratorOptions.ApplyDefaultValues = true;
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:53:27