我正在构建一个控制器,它应该通过请求的主体接收一个Workflow类型,但它不考虑JsonIgore属性,并抛出一个模型验证错误,如下所示:

"名称字段是必填项."

当我研究斯威格的身体建议时,这是人们所期待的:

{
  "schedule": "string",
}

但是,即使我在请求中显式指定了name,它仍然抛出相同的异常.为什么?


这是我的测试设置:

public class Workflow
{
    [JsonIgnore]
    public string Name { get; set; }

    public string Schedule { get; set; }

    // ...
}

[ApiController]
[Route("api/[controller]")]
public class WorkflowsController : ControllerBase
{    

    [HttpPut("{workflowName}")]
    public async Task<int> CreateWorkflow(string workflowName, [FromBody] Workflow workflow)
    {
        return await Task.FromResult(0);
    }
}

我是否必须为Body创建另一个类,或者有什么方法可以修复这种奇怪的行为吗?

推荐答案

JsonIgnore将忽略该属性进行序列化,这意味着它不会设置它.由于您使用的是可为空的引用类型,因此属性Name应该有一个值&;模型验证将考虑这一点.

您可以为其指定一个缺省值

public string Name { get; set; } = string.Empty;

或使其可为空

public string? Name { get; set; }

Csharp相关问答推荐

如何使用Unity和MRTK3将手网添加到Hololens 2应用程序中

哪个nuget包含SecurityStampValidatorOptions

一小时后,自定义缓存停止在App Insight中保存

MudBlazor—MudDataGrid—默认过滤器定义不允许用户修改基本过滤器

MAUI查询参数单一字符串项将不起作用

有没有办法使.NET 6应用程序在特定的.NET 6运行时版本上运行

默认情况下,.NET通用主机(Host.CreateDefaultBuilder)中是否包含UseConsoleLifetime?

无法创建';';类型的';DbContext';.异常';无法解析类型';Microsoft.EntityFrameworkCore.DbContextOptions`1[Comm的服务

如何使用新的Microsoft.IdentityModel.JsonWebToken创建JwtSecurityToken?

如何在没有前缀和可选后缀的情况下获取Razor Page Handler方法名称?

当前的文化决定了错误的文化

显示文档的ECDsa签名PDF在Adobe Reader中签名后已被更改或损坏

RabbitMQ群集的MassTransit配置问题

如何在.NET MAUI中最大化GraphicsView的大小?

用于ASP.NET核心的最小扩展坞

如何设置WinForms按钮焦点,使其看起来像是被Tab键插入其中?

为什么C#中的类型别名不能在另一个别名中使用?

S,在.NET核心控制台应用程序中,AddScope和AddSingleton有什么不同?

.NET6最小API:操作.MapGet之后的响应

需要帮助才能在图片框中显示C#(WinForm)中纯资源DLL中的图像