.net core 将空值传递给.netcore web api项目中的web api调用中的可空属性时出现问题
在HttpGet谓词中将空参数值传递给模型的属性时,我遇到了一个问题 我在web API项目中使用.Net Core 2.1。以下是我在控制器中的操作方法:.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("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