如何修改操作方法以返回单个实体结果?

时间:2016-02-25 18:51:48

标签: asp.net asp.net-web-api

我有一个名为Product的Model类和一个名为ProductController的控制器类,其中我只有一个方法。

模型类

public class Product
    {
        public int Id { set; get; }
        public string Name { set; get; }
        public string Category { set; get; }
        public Double Price { set; get; }
    }

控制器类

public List<Product> Get()
        {
            Product product_1 = new Product();

            product_1.Id = 01;
            product_1.Name = "Car";
            product_1.Category = "Toy";
            product_1.Price = 100 ;

            Product product_2 = new Product();

            product_2.Id = 02;
            product_2.Name = "Bike";
            product_2.Category = "Toy";
            product_2.Price = 50;

            List<Product> list = new List<Product>();
            list.Add(product_1);
            list.Add(product_2);

            return list;
        }

运行时,它会在浏览器中显示所有产品数据。但我只想让它返回一个结果。

1 个答案:

答案 0 :(得分:0)

如果您只希望它显示单个产品的数据,那么您需要让您的操作方法接受一个参数,告诉您要显示哪个产品,并且您需要返回单个产品。您还需要调整路由以期望参数。

通过使用Linq的Single()扩展方法,我们可以同时过滤结果并检索单个产品。

public Product Get(int id)
{
    var product = GetAllProducts().Single(p => p.Id == id);
    return product;
}

//this would normally be part of your data layer rather than in the controller
private List<Product> GetAllProducts()
{
    Product product_1 = new Product();

    product_1.Id = 01;
    product_1.Name = "Car";
    product_1.Category = "Toy";
    product_1.Price = 100 ;

    Product product_2 = new Product();

    product_2.Id = 02;
    product_2.Name = "Bike";
    product_2.Category = "Toy";
    product_2.Price = 50;

    List<Product> list = new List<Product>();
    list.Add(product_1);
    list.Add(product_2);

    return list;
}

您可能需要根据客户要求不存在的特定ID的情况进行必要的调整。