【发布时间】:2018-05-02 03:43:23
【问题描述】:
我开发了一个web api,它接受两个日期时间参数(开始和结束),然后应该给出不同的记录。
public HttpResponseMessage GetMeterPing(DateTime start, DateTime end)
{
try
{
var startDateTime = start;
var endDateTime = end;
var result = medEntitites.tj_xhqd.Where(m => m.sjsj >= startDateTime && m.sjsj <= endDateTime)
.OrderByDescending(o => o.sjsj)
.Select(s => new { s.zdjh, s.sjsj, s.xhqd })
.Distinct()
.FirstOrDefault();
return Request.CreateResponse(HttpStatusCode.OK, new { data = result });
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
}
}
API 网址: http://localhost:14909/api/meters/GetMeterPing/2018-04-28T00:00:00/2018-04-27T23:59:59
当我运行这个web-api 时,它给了我
{"数据":null}
在调试它时,result 也是 null
任何帮助将不胜感激
【问题讨论】:
-
这里有一个明显的问题,但是
2018-04-28T00:00:00在2018-04-27T23:59:59之前是什么宇宙?或者更准确地说,日期如何同时满足这两个条件:>= 2018-04-28和<= 2018-04-27T23:59:59? -
...我没有看日期的顺序。这肯定是 Linq 查询没有返回结果的根本原因。
-
@john 我会回答这个问题。它似乎源于一个相当简单的印刷错误,但它有足够清晰的解释,我认为这不是一个坏问题。至少,它可以作为构建此类服务时必须小心的示例。由于提供的日期对服务来说是无意义的,因此如果日期被翻转,代码将受益于抛出
BadRequest。 (对于某些 API,发送的日期与发送的日期完全一样是表达“不在”的方式) -
@john ...没什么大不了的。只是在他打算的情况下,这只是一个印刷错误。翻转日期是在 api 中支持“日期不在范围内”功能的一种方式,因此需要额外的验证以增加其内涵的表达能力,而不仅仅是一个错字。
-
@Alan 我明白你的意思。我将撤回我的近距离投票。
标签: c# rest asp.net-web-api response