Utilizzo di Dynamic LINQ per ottenere un filtro per la mia API Web

3

Stiamo prendendo in considerazione l'utilizzo del Dynamic linux-sample incluso nella directory "Samples" di Visual Studio 2008 per il nostro progetto WebAPI per consentire ai clienti di interrogare i nostri dati.

L'interfaccia sarebbe qualcosa di simile a questo (oltre ai normali metodi GET):

public HttpResponseMessage List(string filter = null);

Il piano è quello di utilizzare la libreria dinamica per analizzare la variabile "filter" e quindi eseguire nuovamente la query sul DB. Qualche idea se questa è una buona idea? È un problema di sicurezza?

    
posta Espo 14.10.2013 - 08:50
fonte

1 risposta

2

Lo implementiamo in modo leggermente diverso al momento.

Abbiamo introdotto Classi filtro e filtri Processori.
Il processore del filtro prende il filtro intstance e lo converte in espressione di tipo Expression<Func<FilteredEntityType,bool>> che viene quindi utilizzato come parametro di Where in Repository.

Nella fase di elaborazione del filtro è possibile introdurre alcune logiche complesse che riguardano, ad esempio, i diritti di accesso.

È anche possibile elaborare la query OData contro DTO esposti e convertirla nella query di filtraggio POCO corrispondente. Ma è più difficile fare un wotk con gli alberi di espressione piuttosto di classe.

Ecco uno dei nostri filtri:

[DataContract]
public class ProductFilter
{
    [DataMember]
    public int? ProductId { get; set; }

    [DataMember]
    public int? VendorId { get; set; }

    [DataMember]
    public string VendorNameEquals { get; set; }

    [DataMember]
    public int? ProductTypeId { get; set; }

    [DataMember]
    public string NameContains { get; set; }

    [DataMember]
    public string NameEquals { get; set; }
}
    
risposta data 24.10.2013 - 09:50
fonte

Leggi altre domande sui tag