【发布时间】:2016-07-27 19:13:02
【问题描述】:
希望有人可以帮助解决我一直遇到的问题。 我创建了一个从数据库中获取记录的 Web API。 我有以下功能可以正常工作:
localhost:8080/api/Budgets -- 返回所有预算
localhost:8080/api/Budgets(799) -- 返回所有合约 799
我正在寻找的是能够传入两个参数以允许我对检索到的记录进行计算,例如:
localhost:8080/api/Budgets(799)/215 -- 其中799是合同编号,215是材料编号。
这将允许我返回一个仅包含该预算材料的数据集,然后我可以对其进行计算。这只有一个 SQL 表,其中包含合同号和材料号以及大量其他数字。
这是我目前所拥有的,但它似乎不起作用:
public IHttpActionResult Get()
{
return Ok(context.Budgets);
}
public IHttpActionResult Get([FromODataUri] int key)
{
var budgets = context.Budgets.FirstOrDefault(p => p.ProjectNo == key);
if (budgets == null)
{
return NotFound();
}
return Ok(budgets);
}
[ODataRoute("GetMaterialUsage(ProjectId={ProjectId},ResourceCode={ResourceCode})")]
public IHttpActionResult GetMaterialUsage([FromODataUri] int ProjectId, [FromODataUri] string ResourceCode)
{
var budgets = context.Budgets.FirstOrDefault(p => p.ProjectNo == ProjectId && p.ResourceCode == ResourceCode);
if (budgets == null)
{
return NotFound();
}
return Ok(budgets);
}
WebApiConfig:
ODataModelBuilder builder = new ODataConventionModelBuilder();
// Web API configuration and services
builder.EntitySet<BudgetTypes>("BudgetTypes");
builder.EntitySet<Budgets>("Budgets");
var function = builder.Function("GetMaterialUsage");
function.Parameter<int>("ProjectId");
function.Parameter<string>("ResourceCode");
function.ReturnsCollectionFromEntitySet<Budgets>("Budgets");
// Web API routes
config.MapHttpAttributeRoutes();
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: "api",
model: builder.GetEdmModel()
);
谁能阐明如何做到这一点? 我只想将 2 个参数从 url 传递给一个函数。
目前以下链接返回 404: 本地主机:8080/api/预算(752,230) localhost:8080/api/Budgets(ProjectNo=752,ResourceCode=230)
【问题讨论】:
标签: controller asp.net-web-api2 odata