C# 将参数传递给ASP.NET';s Web API 2 OData v4 REST API

C# 将参数传递给ASP.NET';s Web API 2 OData v4 REST API,c#,asp.net,rest,api,odata,C#,Asp.net,Rest,Api,Odata,Microsoft的OData实现允许通过在$filter选项中应用布尔表达式来过滤数据集。这对于动态过滤(通常由客户机请求)很有用,但是如果RESTAPI的GET方法用于枚举列表,需要一些始终需要的基本输入参数,该怎么办 例如,让我们在Web API控制器上定义以下模型: public class RoastedCoffeeProduct { [Key] public Guid ProductId { get; set; } public string Name { g

Microsoft的OData实现允许通过在$filter选项中应用布尔表达式来过滤数据集。这对于动态过滤(通常由客户机请求)很有用,但是如果RESTAPI的GET方法用于枚举列表,需要一些始终需要的基本输入参数,该怎么办

例如,让我们在Web API控制器上定义以下模型:

public class RoastedCoffeeProduct
{
    [Key]
    public Guid ProductId { get; set; }
    public string Name { get; set; }
    public string Brand { get; set; }
    public string StoreName { get; set; }
    public Location StoreLocation { get; set; }
    public decimal CurrentPrice { get; set; }
    public int StoreStock { get; set; }
}

public class Location
{
    public Guid LocationId { get; set; }
    public string Country { get; set; }
    public string Region { get; set; }
}
然后在REST API上定义以下GET方法:

/odata/RoastedCoffeeProducts/
我们的期望是获得给定地点商店中所有可供销售的烘焙咖啡产品的计数。一个用例是这样的:“在国家:'美国',地区:'雷德蒙',销售所有烘焙咖啡产品。这将返回许多JSON项的枚举,如下所示(为简洁起见,仅显示一个):

因此,让我们假设GET方法所需的基本输入参数是“国家”和“地区”。应始终提供它们,因为Web API 2控制器调用以下方法获取它们:

var productsBeingSold = storesRepository.FindAllCoffeeProducts(country, region);
因此,存储库中的FindAllCoffeeProducts方法需要国家和地区作为输入参数。假设此方法返回大约200个项目。如果客户希望进一步过滤这200个项目的数据集,如产品名称为“Nespresso胶囊”的数据集,则OData过滤功能将生效:

/odata/RoastedCoffeeProducts?$filter=name eq 'Nespresso capsules'

这样,OData将自动筛选200项数据集中的所有匹配项。我的问题是关于国家和地区所需的基本输入参数:OData$filter子句中是否也应提供这些参数?我认为这是不正确的,因为严格来说,这不是过滤器的一部分,而是正常工作所需的输入参数的一部分。那么应该在哪里提供呢?可能在身体里?OData筛选应应用于生成的数据集,但数据集需要知道国家和地区作为所需的输入参数。

您所描述的是OData函数,它可以采用某些参数,结果仍然可以进行筛选和排序等。有关更多详细信息,请参阅此链接:

下面是一个使用OData TripPin示例服务的未绑定函数示例,该示例服务具有一个名为
GetNeareStarport
的函数,该函数使用URL中指定的两个参数
lat
lon

您所描述的是OData函数,它可以接受某些参数,结果仍然可以过滤和排序等。有关更多详细信息,请参阅此链接:

下面是一个使用OData TripPin示例服务的未绑定函数示例,该示例服务具有一个名为
GetNeareStarport
的函数,该函数使用URL中指定的两个参数
lat
lon

/odata/RoastedCoffeeProducts?$filter=name eq 'Nespresso capsules'