微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在对 ASP.NET 核心服务器的 POST 请求正文中使用字符串化枚举?

如何解决如何在对 ASP.NET 核心服务器的 POST 请求正文中使用字符串化枚举?

服务器代码

[HttpPost("/<route>/update2")]
        public StatusCodeResult UpdatePanel2([FromBody] PanelUpdateReq updateRequest)
        {
            if (updateRequest == null)
                return BadRequest();

            return Ok();
        }
public enum ZZ
    {
        A,B
    }

    public class D
    {
        public int Index { get; set; }

        public string Path1 { get; set; }

        public string Path2 { get; set; }

        public ZZ DefectType { get; set; }

        public double foo { get; set; }

        public int bar { get; set; }
    }

    public class PanelUpdateReq
    {
        public int Number { get; set; }

        public string Path { get; set; }

        public List<D> Items { get; set; }
    }

我发现当我为 DefectType 枚举使用数字值(即“DefectType”:0)时,请求返回 OK。但是如果我发送字母 "DefectType": "A" 那么服务器无法解析请求并返回一个错误的请求。

这是完整的请求:

{
    "Number" : 2738,"Path" : "abc/cd/2738","Items": [
        {
            "Index" : 1,"Path1" : "some path 1","Path2" : "some path 2","DefectType" : 0,// or "A" which does not work
            "foo": 10.0,"bar" : 11
        }
    ]
}

知道这里出了什么问题吗?我在 SO (here's 1 for example) 上查看了多个其他问题,一致认为使用“A”应该有效。

我使用的是 Postman 客户端,如果重要的话,在标题中将内容类型设置为 application/json

解决方法

如果给enum传递一个字符串,可以在启动时配置enum的序列化。

services.AddControllers()
            .AddJsonOptions(option=>
            {
                option.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
            });

然后,它可以接收值。

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。