我创建了一个WEB API
,它正在我的本地系统上工作。但是在服务器上部署它之后,它给了我错误/异常。
{"消息":"发生错误。"," ExceptionMessage":"序列 包含没有 元素"" ExceptionType":" System.InvalidOperationException""堆栈跟踪":" 在System.Linq.Enumerable.First [TSource](IEnumerable
1 source)\r\n at System.Linq.Queryable.First[TSource](IQueryable
1 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}$" }
);
SERVER LOCAL网址: http://localhost:8080/api/meters/GetByMsn/0002999000536/2017-10-21T18:26:08
我不知道为什么这个API无效LIVE
,因为它正在本地系统上工作。它也可以在服务器上运行。
任何帮助都将受到高度赞赏
答案 0 :(得分:1)
当源序列为空时,First()
扩展方法将抛出异常。在这种情况下,看起来你的LINQ表达式中where子句没有返回有效的集合,因此你得到了这个错误。
您应该使用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
。