2012-08-28 16 views
7

Possiedo un progetto API Web ASP.NET. Sto cercando di passare alcune opzioni di query al mio controller API in questo modo:Non è possibile utilizzare le opzioni di query oData

http://localhost:61736/api/Enquiries? 
callback=callback&$top=30&$skip=30&orderby=EnquiryId 
&$inlinecount=allpages&_=1346164698393 

Ma ottengo il seguente:

The query parameter '$inlinecount' is not supported.

Ho anche lo stesso quando provo ad usare $callback, $format

Qualche idea su cosa sto facendo male? Secondo: http://msdn.microsoft.com/en-us/library/ff478141.aspx Dovrei essere in grado di usarli?

+1

Ora è supportato http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options – Brij

risposta

7

L'API Web ASP.NET fornisce solo limitata supporto per OData come documented in this blog post. non ho visto i parametri di query, si fa riferimento in tale elenco.

+0

Esiste un'alternativa? : o – CallumVass

+0

Suppongo che potresti creare un ApiController che sarebbe un proxy per un normale servizio basato su OData. Il servizio OData eseguirà effettivamente la query e il controller restituirà solo le risposte. –

2

Nella versione corrente, web api supporta solo $ filter, $ orderby, $ top e $ skip. È possibile eseguire l'override di QueryableAttribute per aggiungere ulteriore supporto sul protocollo OData. Un controllo dopo la pubblicazione pubblica di nuget ha reso virtuale il metodo ValidateQuery in modo da poterlo sovrascrivere per bypassare la convalida. Si prega di provare il nostro build notturno al http://www.myget.org/F/aspnetwebstacknightly/.

È inoltre possibile utilizzare ODataQueryOptions. Il codice seguente è equivalente all'attributo [Queryable], tranne per il fatto che non genera eccezioni quando visualizza opzioni non supportate.

public IEnumerable<Product> Get(ODataQueryOptions options) 
{ 
    return options.ApplyTo(_db.Products as IQueryable) as IEnumerable<Product>; 
} 

È possibile ottenere $ inlinecount da ODataQueryOptions.RawValues.InlineCount. Per informazioni dettagliate sul supporto per query OData, vedere: http://blogs.msdn.com/b/alexj/archive/2012/08/21/web-api-queryable-current-support-and-tentative-roadmap.aspx

2

Il supporto per $ inlinecount è stato archiviato nel progetto il 12/6/2012, presumibilmente la prossima versione conterrà questo supporto. è possibile scaricare l'ultima fonte o prendere una nightly build:

http://aspnetwebstack.codeplex.com/SourceControl/changeset/ed65e90e83c8

Revision: ed65e90e83c8f9391b4f4806d305c83f55d28ff6 
Author: youssefm <[email protected]> 
Date: 12/6/2012 1:51:44 PM 
Message: 
[OData] Add support for the $inlinecount query option 

credo pacchetti notturne sono spinti a http://www.myget.org/F/aspnetwebstacknightly/, ma non mi hanno verificato.

+0

L'attuale build notturno non lamenta $ inlinecount, ma non fornisce una risposta formattata correttamente che include il conteggio (ad esempio, nessun cambiamento nel comportamento). –

1

Se si utilizza KendoUI per caso, this post spiega come disabilitare alcune opzioni come $ callback passando a JSON anziché a JSONP.

+1

Kendo ora supporta ODATA V4 non è più necessario apportare modifiche a fallo funzionare. È possibile modificare il tipo di set di dati dal tipo: 'odata' per digitare: 'odata-v4' – Choco

+1

grazie a @choco ma ho rinunciato a oData molto tempo fa - era troppo confuso –