我写了一个简单的选择来查找数据库中的搜索数据。事实上,在我的情况下,当数据库中没有项目时,方法返回一个空的json。
[Route("api/Atributes/{value}")]
public IHttpActionResult GetAtributeByValue(string value)
{
var atribute = ( from a in db.Atributes
join p in db.Cards on a.Atr_Nr equals p.Card_Nr
where a.Atr_Value == value
select new Employee
{
Name = p.Name,
Surname = p.Surname,
Number = a.Atr_Value
});
//this is statement id not working
if (atribute == null)
{
return NotFound();
}
return Ok(atribute);
}
问题是:这种搜索方法是否正确?如果不是我应该怎样以另一种方式制作它?
答案 0 :(得分:2)
将结果集转换为List并使用其length属性进行检查。 LINQ延迟执行。使用.ToList()获取实际结果集。
[Route("api/Atributes/{value}")]
public IHttpActionResult GetAtributeByValue(string value)
{
var atribute = ( from a in db.Atributes
join p in db.Cards on a.Atr_Nr equals p.Card_Nr
where a.Atr_Value == value
select new Employee
{
Name = p.Name,
Surname = p.Surname,
Number = a.Atr_Value
}).ToList();
//use count, if that does not work, length here
if (atribute.Count() == 0)
{
return NotFound();
}
return Ok(atribute);
}
答案 1 :(得分:0)
似乎该方法正在尝试Atribute列表。所以你只需要直接返回属性
[Route("api/Atributes/{value}")]
public IHttpActionResult GetAtributeByValue(string value)
{
var atribute = ( from a in db.Atributes
join p in db.Cards on a.Atr_Nr equals p.Card_Nr
where a.Atr_Value == value
select new Employee
{
Name = p.Name,
Surname = p.Surname,
Number = a.Atr_Value
});
return Ok(atribute);
}
编辑: 为什么不404(未找到)?
404状态代码应保留用于未找到资源的情况。在这种情况下,您的资源是Atribute的集合。此集合存在,但它目前是空的。如果我有一天200,而第二天404就是因为有人碰巧删除了几个Atributes,那么它作为你的应用程序的客户的作者非常困惑。我应该做些什么?我的网址错了吗?是否有人更改了API并忽略了重定向。