当前位置: 首页 > 知识库问答 >
问题:

Net Core-将后枚举数组接收到控制器

訾安邦
2023-03-14

我正在学习。NET核心,但我不知道如何做到这一点。

具有该控制器:

[Route("api/[controller]")]
[ApiController]
public class ModelController : Controller
{
        private readonly ModelService _modelService;

        public ModelController(ModelService ModelService)
        {
            _modelService= ModelService;
        }
        [HttpGet]
        public ActionResult<ListModel>> Get() =>
            _modelService.Get();

        [HttpPost]
        public ActionResult<Model> Create(Model newModel)
        {
            _modelService.Create(newModel);

            return CreatedAtRoute("GetModel", new { id = model.Id.ToString() }, model);
        }
}

此枚举:

public enum ModelEnum
{
    Property = 0,
    OtherProperty = 1
}

这个模型:

public class Model
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
    [BsonElement("Name")]
    public string Name{ get; html" target="_blank">set; }
    public ModelEnum[] theEnum { get; set; }
}

如何使用theEnum属性发送请求?我正在使用postman进行测试。当我尝试这样做时,我会收到一个HTTP 400响应,总是有错误

第一个测试:{“Name”:“test”,“theEnum”:[1,2]}

第一个错误响应

{“类型”:https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1“标题”:“出现一个或多个验证错误。,“状态”:400,“traceId”:“|100e6798-429066A034F49F7.”,“错误”:{“$.classes”:[“JSON值无法转换为System.String.Path:$.Clases |行号:2|“BytePositionLine:21”。]}

第二次尝试:

{
    "Name": "Test",
    "theEnum": ["Property", "OtherProperty"]
}

第二个错误响应:

{ “type”: “https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1”, “title”: “发生了一个或多个验证错误。”, “status”: 400, “traceId”: “|100e6799-429066a034f499f7.”, “errors”: { “$.Escuelas[0]“: [ ”JSON 值无法转换为 Project.ModelEnum[]。路径:$。埃斯库埃拉斯[0] |行号: 3 |BytePositionInLine: 29.“ ]} }

所以我想知道,如何发送Enum类型数组的值?我做错了吗?也许验证消息说我需要什么,但我无法理解。

共有2个答案

沈博涉
2023-03-14

我想问题是关于将枚举数组序列化为JSON。在Core 3.0中,有一个新的序列化器还不完全支持枚举的序列化。您需要做的是将Newtonsoft.Json添加到您的项目中。然后在Startup.ConfigureServices.中调用AddNewtonsoftJson()

请注意,枚举数组在序列化期间转换为数字

叶修永
2023-03-14

您测试枚举1和2的值,但不为值2提供枚举
您提供

public enum ModelEnum
{
    Property = 0,
    OtherProperty = 1
}

值为0的属性和值为1的其他属性。但测试值1和2。在ModelEnum中添加MyProperty=2,或测试0,1值
用于secon。请尝试使用StringEnumConverter

 类似资料:
  • 而且返回的值与给定的值也不匹配。我怎么才能做到?

  • 我想在我的项目中包含swagger,但我不能更改代码或变量名称。 我有一个返回列表的服务: 代码变量来自枚举操作可能的错误: 是否可以将“代码”和TYPE枚举相关联,以便我可以在生成的swagger文档中显示选项列表? 谢谢

  • 问题内容: 我想知道如何重新排序枚举,以便所有山羊都在数组的开头而所有羊都在数组的结尾。现在,它实际上可以解决问题,但是要等到数组大小> 100为止。重新排序的速度也很重要,因此api方法有点太慢了。有什么建议? 问题答案: 由于是Implements ,您可以简单地对数组进行排序然后反转: 您也许还可以做到以下几点: 这与API调用基本上具有相同的作用,只是将数组包装在对象中的开销非常小。您甚至

  • 我正在将jooq从3.4.1版本更新到3.9.3版本,并注意到MySQL 5.6数据库中具有枚举字段的表的模型是用字符串类型生成的。 对应于字段的枚举是正确生成的,只是没有链接到对应于表的pojo。 这是为表Foo生成的Pojo示例: 和未链接到表pojo的枚举,尽管其名称中包含表的Foo前缀: 我没有更改任何配置,只更改了jooq版本。我想知道这是否是一个bug,或者很可能是我这边缺少了一些配置

  • 问题内容: 我正在尝试将JSON数组发布到MVC控制器。但是,无论我尝试什么,都为0或null。 我有包含文本框的表。我需要所有这些文本框中的ID和值作为对象。 这是我的Javascript: 这是我的查看代码: 这是控制器即时通讯试图接收数据以: 我究竟做错了什么? 问题答案: 您的代码有很多问题。让我们从标记开始。您有一个表,该表的每一行中都包含隐藏字段。除了您已经对那些隐藏元素的属性进行了硬

  • 我有一个实体,有一个枚举类型字段和一个具有相同枚举类型和字段名的DTO。 我使用modelMapper创建一个新对象,不需要额外的配置。 但在将dto映射到实体对象后,实体对象上的性别为空。 对象有性别,我已经检查了很多。 请帮我理解这个问题。