【问题标题】:Web API giving null in responseWeb API 给出 ​​null 作为响应
【发布时间】: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:002018-04-27T23:59:59 之前是什么宇宙?或者更准确地说,日期如何同时满足这两个条件:&gt;= 2018-04-28&lt;= 2018-04-27T23:59:59
  • ...我没有看日期的顺序。这肯定是 Linq 查询没有返回结果的根本原因。
  • @john 我会回答这个问题。它似乎源于一个相当简单的印刷错误,但它有足够清晰的解释,我认为这不是一个坏问题。至少,它可以作为构建此类服务时必须小心的示例。由于提供的日期对服务来说是无意义的,因此如果日期被翻转,代码将受益于抛出BadRequest。 (对于某些 API,发送的日期与发送的日期完全一样是表达“不在”的方式)
  • @john ...没什么大不了的。只是在他打算的情况下,这只是一个印刷错误。翻转日期是在 api 中支持“日期不在范围内”功能的一种方式,因此需要额外的验证以增加其内涵的表达能力,而不仅仅是一个错字。
  • @Alan 我明白你的意思。我将撤回我的近距离投票。

标签: c# rest asp.net-web-api response


【解决方案1】:

您对问题的描述听起来像您正在执行的 Linq 查询没有返回任何结果,因此您对 FirstOrDefault 的调用是默认的,也就是说它返回 null。然后,您不执行任何其他验证,并将此行的结果设置为具有data 属性的匿名投影的值。

【讨论】:

    猜你喜欢
    • 2018-07-29
    • 2014-06-05
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2019-03-16
    • 1970-01-01
    相关资源
    最近更新 更多