WebApi OData: $filtre "tout" ou "tous" de la requête ne fonctionne pas
D'abord, à l'aide de la ASP.NET WebApi tutoriels, j'ai créé une base de ApiController qui expose un modèle d'Entity Framework par OData. Le service fonctionne de retour json pour OData $filtrer les requêtes.
Lorsque j'effectue OData $filtrer les requêtes qui comprennent "tout" ou "tous" queryies sur un multi-valeur de la propriété il jette un ODataException
Voici la requête OData je suis en train d'utiliser
~/api/Blogs?$filter=any(Tags,Name+eq+'csharp')
Mon ApiController ressemble à ceci:
public class BlogController : ApiController
{
public BlogsController()
{
this.Entities = new BlogEntities();
}
public ContactEntities Entities { get; set; }
[Queryable(PageSize = 25, AllowedQueryOptions = AllowedQueryOptions.All)]
public IQueryable<Blog> Get()
{
return this.Entities.Blogs;
}
}
L'entité Blog a présent contrat
public Blog {
public Guid ID { get; set; }
public string Title { get; set; }
public Tag Tags { get; set; }
}
public Tag {
public Guid ID { get; set; }
public string Name { get; set; }
}
L'exception levée
ODataException: Type 'Blog' does not have a property 'Name'
Comme vous pouvez le voir, je n'ai rien hors de l'ordinaire dans mon code et tout devrait fonctionner correctement. Est-il possible que "tout" et "tous" queryies ne sont pas encore pris en charge dans Microsoft ASP.NET l'API Web OData?
OriginalL'auteur Chris Pietschmann | 2013-03-18
Vous devez vous connecter pour publier un commentaire.
Votre tout doit être changé un peu. Essayez quelque chose comme ceci:
C'est en supposant que les Balises renvoie en fait une collection de Tags, pas seulement une seule Balise comme vous avez ci-dessus.
$inlinecount est uniquement pris en charge hors de la boîte pour le format OData. J'ai écrit de nombreux ouvrages sur le sujet ici:
L'API Web OData Inlinecount ne fonctionne pas
La réponse courte est que vous pouvez le faire fonctionner pour d'autres formats avec le code qui ressemble à ceci:
L' $inlinecount réponse ne fonctionne pas pour un service qui hérite de "ApiController"
Je viens de tester à nouveau, il fonctionne. Veuillez inclure votre code et l'adresse URL que vous avez utilisé.
ApiController n'a pas de "GetNextPageLink" et "GetInlineCount" méthodes...
Mais ApiController a une Demande de la propriété. Vous devrez ajouter une aide pour le Système.Net.Espace de noms Http pour obtenir les autres méthodes.
OriginalL'auteur Youssef Moussaoui