希望有人能夠解決我一直遇到的問題。 我已經創建了一個從數據庫中提取記錄的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