.Net Core API拒绝不完整的JSON请求

问题描述

如果正文的JSON不完整,我需要拒绝该请求。

我有一个.NetCore API,它具有很多属性。该API会执行很多操作,并且会收到很多请求,因此,如果JSON事先不完整,则要拒绝。

如果我在下方的AssignmentDetail类中,

public class AssignmentDetail
{
    public string Name { get; set; }
    public string Address { get; set; }
}

完整的JSON示例

{
     "Name":"dfsdfsdf","Address":"essdfsdfsd",}

不完整的JSON示例

{
     "Name":"dfsdfsdf" 
}

我有一些方法,但是需要一些可以在启动时完成的操作,只是针对该操作。

  1. 为该AssignmentDetail模型使用自定义的可序列化(不需要这种方法
  2. 创建一个函数来验证不完整的JSON,例如validateIncompleteJSON()(不需要这种方法
  3. ConfigureServices(IServiceCollection服务)中的某些内容,但仅用于该控制器操作

    [HttpPost]
    [Route("ProcessAssignment")]
    public async Task<AssignmentResponseModel> ProcessAssignment(AssignmentDetail model)
    {
        var response = new AssignmentResponseModel();
        try
        {
            //can call function here to check the incomlpete JSON 
            //validateIncompleteJSON();


            //var result = await _mediator.Send(queryDetails);
            //response = result.Response;
        }
        catch (Exception ex)
        {
            throw exception;
        }
        return response;
    }

我不想使用Serializable方法,因为该类太大了,将不得不处理所有属性

解决方法

enter image description here

数据注释将必需属性添加到属性

型号代码

#!/bin/sh
message="Hello,Aurora"
scriptname="hello_script_1_controlmQA"

generate_post_data()
{
 cat <<EOF
{
    "data":"{\"actiontodo\":\"Action to do for test nr:
    1\",\"critical\":\"LOW\",\"fixstatus\":\"NOTCONCERN\",\"host\":\"MTR_SOME_HOST\",\"message\":\"$message\",\"mgsApplication\":\"MTR\",\"sMxtype\":\"PROD\",\"scriptname\":\"$scriptname\"}","msg":"NotificationReceiveDTO without dict to send at: 2020-06-07T11:14:09.794 Created at: 2020- 
 06-07T11:14:09.797","msgType":"DATA"
 }
EOF
}


/usr/bin/wget --no-check-certificate --header="Accept: application/json" -- 
header="Content-Type:application/json" --post-data "$(generate_post_data)" 
"https://cas.internal.unicreditgroup.eu:8181/Aurora/rs/nores/renosub"

控制器代码

public class AssignmentDetail
{
    [Required]
    public string Name { get; set; }
    [Required]
    public string Address { get; set; }
}