在 .netcore web api 项目中将 null 值传递给 web api 调用中的可为空属性时出现问题
Issue while passing null values to nullable properties in web api call in .netcore web api project
我在将空参数值传递给 HttpGet 动词中模型的属性时遇到问题。
我正在为我的网络 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
的事情时,你实际上是在说 "set toDate
to "null"
",即 string "null"。 modelbinder 尝试将所有字符串转换为您要绑定的实际类型,但没有可用的转换可以将 "null"
转换为 null DateTime
.
要将值设置为 null
,您需要不传递任何值 toDate=
或完全省略查询字符串中的键。
我在将空参数值传递给 HttpGet 动词中模型的属性时遇到问题。
我正在为我的网络 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
的事情时,你实际上是在说 "set toDate
to "null"
",即 string "null"。 modelbinder 尝试将所有字符串转换为您要绑定的实际类型,但没有可用的转换可以将 "null"
转换为 null DateTime
.
要将值设置为 null
,您需要不传递任何值 toDate=
或完全省略查询字符串中的键。