È possibile ottenere OData per eseguire quanto segue? Mi piacerebbe essere in grado di interrogare una chiamata REST trasmettendo parametri che potrebbero non essere la chiave primaria. Posso chiamare un metodo REST come ->GetReports(22, 2014)
o Reports(22, 2014)
?API Web e OData-Pass Parametri multipli
[HttpGet]
[ODataRoute("Reports(Id={Id}, Year={Year})")]
public IHttpActionResult GetReports([FromODataUri]int Id, [FromODataUri]int Year)
{
return Ok(_reportsRepository.GetReports(Id, Year));
}
Ecco la mia ultima modifica.
//Unbound Action OData v3
var action = builder.Action("ListReports");
action.Parameter<int>("key");
action.Parameter<int>("year");
action.ReturnsCollectionFromEntitySet<Report>("Reports");
il mio metodo per il controller ReportsController
[HttpPost]
[EnableQuery]
public IHttpActionResult ListReports([FromODataUri] int key, ODataActionParameters parameters)
{
if (!ModelState.IsValid)
{
throw new HttpResponseException(HttpStatusCode.BadRequest);
}
int year = (int)parameters["year"];
return Ok(_reportsRepository.GetReports(key, year).Single());
}
Ho provato a chiamare l'url del tipo:
http://localhost:6064/odata/Reports(key=5,year=2014)/ListReports
è stata trovata alcuna risorsa HTTP che corrisponde l'URI della richiesta 'http://localhost:6064/odata/Reports(key%3D5%2Cyear%3D2014)/ListReports'
.`
Come può essere fatto con Odatav3? v3 non ha una funzione. – Keith
Devo usare Odata v3 perché sto usando Jaydata e funziona solo con v3. Se uso Jaydata con Odata v4 solleva un errore 404. Qualsiasi soluzione con v3? Grazie – Keith
Con v3, è possibile definire un'azione. Se si definisce un'azione non associata, è necessario utilizzare HttpPost e passare i parametri attraverso il corpo della richiesta ed è necessario aggiungere un metodo "HandleUnmappedRequest" nel controller per far corrispondere la richiesta di azione non associata. Se lo si definisce come un'azione associata associata all'entità impostata, sebbene ciò non abbia senso, è possibile aggiungere un metodo "[ActionName] OnCollectioinOf [EntityTypeName]" e chiamare HttpPost "~/[EntitySetName]/[ActionName]", e passare i parametri nel corpo della richiesta. –