[英]Asp.Net WebApi model binding nullable datetime
你好,
我有api GET-method /rating
(ASP.Net WebApi 2.1),它接受ChartPageRequest
类型的ChartPageRequest
:
// comments're removed for readability
public sealed class ChartPageRequest
{
public DateTime? From { get; set; }
public DateTime? To { get; set; }
public string Cursor { get; set; }
[Range(-100, 100)]
public int Take { get; set; } = 10;
}
/rating
方法具有以下签名:
[HttpGet]
[Route("rating")]
[ResponseType(typeof(ChartPage))]
[ValidateModelState]
public async Task<IHttpActionResult> GetTranslationRatingChartAsync([ModelBinder] ChartPageRequest model)
{
// body here
}
ValidateModelState
属性只是一个自定义属性,当ModelState无效时,它将返回自定义响应。 除了HttpActionContext.ModelState.IsValid
属性外,它本身不会检查任何内容。
除一种情况外,此api方法工作正常-当客户端明确将null值传递给DateTime?
ChartPageRequest
属性,例如:
/rating?from=2016-07-08 12:01:55.604&to=null
在这种情况下,ValidateModelState属性使用以下消息注册无效的ModelState: The value 'null' is not valid for To
。
我发现这种问题非常流行,但是如果不创建自定义模型绑定程序,就找不到任何好的解决方法。 所以这是问题:
是否有没有自定义模型绑定器的另一种方法?
如果没有,我如何只接受“接受null”作业,而将DateTime解析留给我的自定义资料夹中的默认资料夹?
我是否需要接受所有这些空值? 所有客户都是由我的同事开发的,因此我可以强迫他们不要发送。 毕竟是好习惯吗?
谢谢!
我没有验证此方法,但是我想您可以尝试自己解析它,尽管我认为这不是一种方便的方法,请首先使用字符串获取To
:
public string To { get; set; }
并给另一个属性DateTimeTo
并解析To
自己:
public DateTime? DateTimeTo { get; set; }
public void ParseTo()
{
if(To.ToLower() == "null")
DateTimeTo = null;
else
DateTimeTo = Convert.ToDateTime(To);
}
DateTimeTo
是已解析的结果属性。
我最近遇到了一个Asp.Net WebApi解析主体问题,在某些情况下解析无法很好地进行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.