【问题标题】:WEB API Sequence contains no elementsWEB API 序列不包含任何元素
【发布时间】:2018-02-11 22:37:47
【问题描述】:

我创建了一个在我的本地系统上运行的WEB API。但是在服务器上部署它之后,它给了我下面的错误/异常。

{"Message":"发生错误。","ExceptionMessage":"序列 不包含 元素","ExceptionType":"System.InvalidOperationException","StackTrace":" 在 System.Linq.Enumerable.First[TSource](IEnumerable1 source)\r\n at System.Linq.Queryable.First[TSource](IQueryable1 源)\r\n 在 ActualWebService.Controllers.MetersController.GetByMsn(字符串 msn, 日期时间 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}$" }
       );

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

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

任何帮助将不胜感激

【问题讨论】:

    标签: c# linq asp.net-web-api2


    【解决方案1】:

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

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

    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() 方法返回满足条件的序列的第一个元素,如果没有找到这样的元素,则返回默认值。如果没有符合您条件的记录,您将收到null

    【讨论】:

    • 只是为了您的建议,捕获这个 InvalidOperationException 而不是检查结果是一个好习惯吗?
    • 异常不应用于控制流。所以在这种情况下我不会这样做。
    猜你喜欢
    • 2015-09-04
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    相关资源
    最近更新 更多