搜索选择不返回NotFound方法

时间:2017-09-13 08:03:53

标签: c# sql asp.net asp.net-web-api

我写了一个简单的选择来查找数据库中的搜索数据。事实上,在我的情况下,当数据库中没有项目时,方法返回一个空的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);
}

问题是:这种搜索方法是否正确?如果不是我应该怎样以另一种方式制作它?

2 个答案:

答案 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并忽略了重定向。