.net core 将空值传递给.netcore web api项目中的web api调用中的可空属性时出现问题

.net core 将空值传递给.netcore web api项目中的web api调用中的可空属性时出现问题,.net-core,asp.net-core-mvc,model-binding,asp.net-core-webapi,.net Core,Asp.net Core Mvc,Model Binding,Asp.net Core Webapi,在HttpGet谓词中将空参数值传递给模型的属性时,我遇到了一个问题 我在web API项目中使用.Net Core 2.1。以下是我在控制器中的操作方法: [HttpGet("get")] public ActionResult GetData([FromQuery]MyTestModel model) { var result = new MyTestModel(); return new JsonResult(result);

在HttpGet谓词中将空参数值传递给模型的属性时,我遇到了一个问题

我在web API项目中使用.Net Core 2.1。以下是我在控制器中的操作方法:

    [HttpGet("get")]
    public ActionResult GetData([FromQuery]MyTestModel model)
    {
        var result = new MyTestModel();
        return new JsonResult(result);
    }
我的MyTestModel.cs如下所示:

 [Serializable]
public class MyTestModel
{
    public MyTestModel()
    {
        PageNo = 1;
        PageSize = 10;
    }
    public int ClientId { get; set; }
    public int? CandidateId { get; set; }
    public DateTime? FromDate { get; set; }
    public DateTime? ToDate { get; set; }
    public int PageNo { get; set; }
    public int PageSize { get; set; }
}
当我调用API时,如:

api/controller/get?clientId=7583&candidateId=null&fromDate=null&toDate=null
我收到了400条回复。以下是回应信息:

{"toDate":["The value 'null' is not valid for ToDate."],
 "fromDate":["The value 'null' is not valid for FromDate."],
 "candidateId":["The value 'null' is not valid for CandidateId."]
}
当我根本不发送可为null的属性(candidateId、fromDate、toDate)时,会点击我的操作并使用默认值作为null

如果我试图显式设置空值,会出现什么问题

我是否需要在Startup.cs中设置一些配置来处理可空属性的空值

任何帮助都将不胜感激


提前感谢。

查询字符串中发送的所有内容都只是一个字符串。因此,当您执行类似于
toDate=null
的操作时,实际上是将
toDate
设置为
“null”
,即字符串“null”。modelbinder尝试将所有字符串转换为您要绑定到的实际类型,但没有可用的转换可以将
“null”
转换为null
日期时间


要将值设置为
null
,您需要不传递任何值
toDate=
,或者完全忽略查询字符串中的键。

查询字符串中发送的所有内容都只是一个字符串。因此,当您执行类似于
toDate=null
的操作时,实际上是将
toDate
设置为
“null”
,即字符串“null”。modelbinder尝试将所有字符串转换为您要绑定到的实际类型,但没有可用的转换可以将
“null”
转换为null
日期时间


要将值设置为
null
,您需要不传递任何值
toDate=
,或者只需从查询字符串中完全忽略键。

您只需忽略值(所有内容都作为文本发送,并由ModelBinder转换为类型-没有从“null”转换为
null
)您不需要执行
fromDate=null
。如果要将值作为null发送,则不传递这些值。当您执行
fromDate=null
时,它将“null”作为字符串值,并尝试分配给属性。这就是为什么会出现这个错误。@StephenMuecke,有没有办法处理空值?我只是想知道解决办法。通过从请求中省略空值,我知道了另一种选择。您的意思是使用
&candidateId=null
?您需要创建一个自定义ModelBinder(或者ValueProvider也可以是一个选项)。另请注意,空字符串转换为
null
,您只需忽略该值(所有内容都以文本形式发送,并由ModelBinder转换为类型-没有从“null”转换为
null
),您无需执行
fromDate=null
。如果要将值作为null发送,则不传递这些值。当您执行
fromDate=null
时,它将“null”作为字符串值,并尝试分配给属性。这就是为什么会出现这个错误。@StephenMuecke,有没有办法处理空值?我只是想知道解决办法。通过从请求中省略空值,我知道了另一种选择。您的意思是使用
&candidateId=null
?您需要创建一个自定义ModelBinder(或者ValueProvider也可以是一个选项)。请注意,空字符串转换为
null