希望有人能够解决我一直遇到的问题。 我已经创建了一个从数据库中提取记录的Web API。 我有以下职能到位,其工作确定:Web API,OData在GET操作中以多个参数传递
本地主机:8080/API /预算 - 返回所有预算
本地主机:8080/API /预算(799) - 返回所有合同799
我正在寻找的是能在两个参数来传递,让我做记录calulations检索,因此这样的:
本地主机:8080/API/BUDG ets(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 /预算(752230) 本地主机:8080/API /预算(ProjectNo = 752,ResourceCode = 230)
感谢您的帮助。将ODataRoute像你的评论一样排序:) – McDuff