err*_*ler 1 model-binding asp.net-core-mvc .net-core asp.net-core-webapi
我在HttpGet动词中将空参数值传递给模型的属性时遇到问题。
我将.Net Core 2.1用于我的Web API项目。下面是我在控制器中的操作方法:
[HttpGet("get")]
public ActionResult GetData([FromQuery]MyTestModel model)
{
var result = new MyTestModel();
return new JsonResult(result);
}
Run Code Online (Sandbox Code Playgroud)
我的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; }
}
Run Code Online (Sandbox Code Playgroud)
当我像这样调用API时:
api/controller/get?clientId=7583&candidateId=null&fromDate=null&toDate=null
Run Code Online (Sandbox Code Playgroud)
我得到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."]
}
Run Code Online (Sandbox Code Playgroud)
当我根本不发送任何可为空的属性时(candidateId,fromDate,toDate),这将触发我的操作并将默认值用作null。
如果我尝试显式设置null值,那会是什么问题?
我是否需要在Startup.cs中设置一些配置以处理可为空的属性的空值?
任何帮助将不胜感激 。
提前致谢。
查询字符串中发送的所有内容都只是一个字符串。因此,当您执行类似的操作时toDate=null,您实际上是在说“设置toDate为"null"”,即字符串 “ null”。modelbinder尝试将所有字符串转换为您要绑定到的实际类型,但是没有可用的转换可以"null"转换为null DateTime。
要将值设置为null,您无需传递任何值,toDate=或者仅从查询字符串中完全省略键。
| 归档时间: |
|
| 查看次数: |
960 次 |
| 最近记录: |