获取专门处理0值的方法

时间:2015-07-08 21:35:47

标签: c# entity-framework asp.net-web-api

在我的web api控制器方法中,我有。

public IHttpActionResult GetMember(int id)
    {
        Member member = db.Members.Find(id);
        if (member == null)
        {
            return NotFound();
        }


        return Ok(member);
    }

基本上它在这里检查是否没有id = 0的当前成员,它返回NotFound ......这就是UI正在接收的内容。

场景是,对于0值,API应该提供一个具有良好默认值的新项目。有关如何实现此目的的任何示例?

我想出了这个,但却无法让它正常工作。

public IHttpActionResult GetMember(int id)
    {
        Member member = db.Members.Find(id);
        if (id > 0)
        {
            var members = db.Members.Find();
            member = members.FirstOrDefault((m) => m.MemberId == id);
            //return NotFound();

            if (member == null)
            {
                return NotFound();
            }
            else
            {
               db.Members.Add(member);
                db.SaveChanges();

            }
            return Ok(member);
        }
    }

4 个答案:

答案 0 :(得分:2)

只需初始化一个新的成员对象并将其返回给调用方法。

public IHttpActionResult GetMember(int id)
{
    Member member = new Member();
    if (id > 0)
    {
        var members = db.Members.Find();
        member = members.FirstOrDefault((m) => m.MemberId == id);
    }
    else
    {
        // Set some values if you need Ok(new Member { MemberId = 0, FirstName = "New"} )
    }

    return Ok(member);
}

答案 1 :(得分:2)

我不确定我是否理解目标,但如果我理解正确的话,这可能会发生:

public IHttpActionResult GetMember(int id)
{
    Member member = db.Members.Find(id);
    if (member == null)
    {
        if (id != 0)
        {
            member = new Member();
        }
        else
        {
            return NotFound();
        }
    }
    return Ok(member);
}

这就是你想要的吗?

答案 2 :(得分:1)

#js_outer_div

答案 3 :(得分:0)

以下是此代码所基于的原始代码:

        public IHttpActionResult Get(int id)
    {
        try
        {
            Product product;
            var productRepository = new ProductRepository();

            if (id > 0)
            {
                var products = productRepository.Retrieve();
                product = products.FirstOrDefault(p => p.ProductId == id);
                if (product == null)
                {
                    return NotFound();
                }
            }
            else
            {
                product = productRepository.Create();
            }
            return Ok(product);
        }
        catch (Exception ex)
        {
            return InternalServerError(ex);
        }
    }

要求是从产品更改为成员并包括EF。

考虑保留存储库的使用并在存储库类中添加EF代码而不是此处。 还要考虑向存储库检索方法添加一个重载,该方法将获取一个id并找到所需的成员。然后你可以在这里删除对FirstOrDefault的调用。