WEB API 序列不包含任何元素

WEB API Sequence contains no elements

我创建了一个在本地系统上运行的 WEB API。但是在服务器上部署它之后,它给了我波纹管 error/exception。

{"Message":"An error has occurred.","ExceptionMessage":"Sequence contains no elements","ExceptionType":"System.InvalidOperationException","StackTrace":" at System.Linq.Enumerable.First[TSource](IEnumerable1 source)\r\n at System.Linq.Queryable.First[TSource](IQueryable1 source)\r\n at ActualWebService.Controllers.MetersController.GetByMsn(String msn, DateTime dt)"}

我正在服务器和本地系统中的邮递员上检查它

下面是我的代码

 public HttpResponseMessage GetByMsn(string msn, DateTime dt)
    {          
        try
        {

            var result = medEntitites.tj_xhqd.Where(m => m.zdjh == msn)
                                             .OrderByDescending(o => o.sjsj)
                                             .Select(s => s.sjsj)
                                             .First();

            DateTime resulted = new DateTime();
            DateTime userSent = new DateTime();

            resulted = Convert.ToDateTime(result);
            userSent = Convert.ToDateTime(dt);


            double diff = Math.Abs((resulted - userSent).TotalMinutes); // here i am checking the difference between the user sent datetime and resulted date time

            if (diff <=10)
            {
                return Request.CreateResponse(HttpStatusCode.OK, new { data = new { Response = "Yes"} });
            }
            else
            {
                return Request.CreateResponse(HttpStatusCode.OK, new { data = new { Response = "No" } });
            }

        }
        catch (Exception ex)
        {
            return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
        }
    }

WebApiConfig

 config.Routes.MapHttpRoute(
       name: "GetByMsn",
       routeTemplate: "api/{controller}/{action}/{msn}/{dt}",
       defaults: null,
       constraints: new { msn = @"^[0-9]+$" , dt = @"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$" }
       );

本地服务器 URL: http://localhost:8080/api/meters/GetByMsn/0002999000536/2017-10-21T18:26:08

我不知道为什么这个 API 不工作 LIVE 因为它在本地系统上工作。它也应该在服务器上工作。

任何帮助将不胜感激

First()扩展方法在源序列为空时会抛出异常。在这种情况下,您的带有 where 子句的 LINQ 表达式似乎未返回有效集合,因此您会收到此错误。

您应该使用 FirstOrDefault() 并在继续之前检查它是否为 null。

var result = medEntitites.tj_xhqd.Where(m => m.zdjh == msn)
                                             .OrderByDescending(o => o.sjsj)
                                             .Select(s => s.sjsj)
                                             .FirstOrDefault();
if(result==null)
{
  return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex);
}

FirstOrDefault() 方法 returns 满足条件的序列的第一个元素,如果找不到这样的元素,则为默认值。如果没有符合您条件的记录,您将得到null