【问题标题】:Operator "missing" not working properly in JsonLogic运算符“丢失”在 JsonLogic 中无法正常工作
【发布时间】:2022-05-05 11:01:42
【问题描述】:

我正在使用 JsonLogic 使用 JsonLogic 定义的规则来验证我的输入负载。我可以使用“Play with it”工具测试规则,并且我的规则对我的输入数据运行良好。

但是当我通过我的 .net Core 应用程序通过从 Postman 传递有效负载来运行相同的规则时,规则总是返回 else 条件,即使它应该来自 if 条件的错误。

{
"if": [
{
  "missing": [
     "ProposedProjectDetails.IsFreezone",
    "ProposedProjectDetails.InterestedToLeaseFrom",
    "ProposedProjectDetails.IndustryType",
    "ProposedProjectDetails.OtherType",
    "ProposedProjectDetails.ProjectDescription",
    "ProposedProjectDetails.OutputofFacility",
    "ProposedProjectDetails.ProductionCapacity",
    "ProposedProjectDetails.ProductionCapacityVolume",
    "ProposedProjectDetails.MainRawMaterials",
    "ProposedProjectDetails.RawMaterialQuantity",
    "ProposedProjectDetails.RawMaterialEstimatedCost",
    "ProposedProjectDetails.RawMaterialEstimatedTotInvestment",
    "ProposedProjectDetails.AnnualSalesRevenue",
    "ProposedProjectDetails.ConstructionStartDate",
    "ProposedProjectDetails.Skilledjobs",
    "ProposedProjectDetails.TotalAccomodationRequired",
    "ProposedProjectDetails.TotalWorkerSalary",
    "ProposedProjectDetails.EBITDA",
    "ProposedProjectDetails.PortCargoImports",
  ]
},
"Missing mandatory inputs",
"all good"
]
}

示例输入有效负载是

{
"companyId": "string",
"serviceCode": "IPA",
"serviceType": "string",
"serviceName": "string",
"crmApplicationId": "string",
"crmReferenceNumber": "string",
"portalReferenceNumber": "string",
"data": {
    "proposedProjectDetails": {
        "outputofFacility": 2,
        "productionCapacity": 0,
        "productionCapacityVolume": 0,
        "others": "string",
        "shiftsPerDay": 0
     }
   }
}

我的 .Net 代码正在评估这是

  public ValidationResponse Validate(JObject validation, JObject data)
    {
        var evaluator = new JsonLogicEvaluator(EvaluateOperators.Default);
        var result = evaluator.Apply(validation, data);

        return new ValidationResponse
        {
            IsValid = (string.Equals("All Fine", result.ToString(), StringComparison.OrdinalIgnoreCase)),
            Message = result
        };
    }

当我使用JsonRules 和Payload 以上运行代码时,我总是在响应中得到all good。但由于我在有效负载中缺少所需的数据,它应该会收到错误 Missing mandatory inputs,我确实在 JsonLogic“Play with it”工具中得到了这个错误。

【问题讨论】:

    标签: json asp.net-mvc .net-core jsonlogic


    【解决方案1】:

    尝试将名称保留为 json 映射字段驼峰式一次,如下所示

    "if": [
       {
          "missing": [
                      "proposedProjectDetails.isFreezone",
                      "proposedProjectDetails.interestedToLeaseFrom",
                     ]
       },
       "Missing mandatory inputs",
       "all good"
    ]
    

    }

    【讨论】:

      猜你喜欢
      • 2015-11-27
      • 2015-04-25
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      相关资源
      最近更新 更多