Ich hoffe, jemand kann mit einem Problem, das ich habe, hepl. Ich habe eine Web-API erstellt, die Datensätze aus der Datenbank abruft. Ich habe folgende Funktionen vorhanden, die Arbeit ok:Web-API, OData Übergabe mehrerer Parameter in GET-Operation
localhost: 8080/api/Budget - Gibt allen Haushalt
localhost: 8080/api/Budget (799) - alle Kosten für Vertrags 799
Was ich suche ist in der Lage sein, in zwei Parameter zu übergeben, mir zu erlauben Berechnungen am auf die Datensätze abgerufen so etwas wie zu tun:
localhost: 8080/api/Budg ets (799)/215 - Wobei 799 die Vertragsnummer und 215 eine Materialnummer ist.
Dies wird mir erlauben, einen Datensatz von nur Materialien für dieses Budget zurückgeben, dass ich dann Berechnungen ausführen kann. Es gibt nur eine SQL-Tabelle, die sowohl die Vertragsnummer und die Materialnummer als auch eine Ladung anderer Zahlen enthält.
Hier ist, was ich bisher, aber es funktioniert nicht zu sein scheinen arbeiten:
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()
);
Kann jemand etwas Licht leuchten auf, wie dies getan werden kann? Ich möchte nur 2 Parameter an eine Funktion von der URL übergeben.
Im Moment kehren die folgenden Links 404: localhost: 8080/api/Budget (752.230) localhost: 8080/api/Budget (ProjectNo = 752, ResourceCode = 230)
Danke für die Hilfe. Assing die ODataRoute wie dein Kommentar sortiert es :) – McDuff