2010-05-20 17 views
2

Est-il possible dans OpenRasta d'avoir un modèle Uri qui permet de soumettre un tableau de valeurs de la même clé et de le mapper à une méthode gestionnaire acceptant un tableau des paramètres de la requête.Dans OpenRasta est-il possible de faire correspondre plusieurs paires clé/valeur?

Exemple: renvoie tous les contacts nommés Dave Smith d'une collection.

HTTP GET/contacts filterBy = premier & FilterValue = Dave & filterBy = dernière & FilterValue = Smith

Avec une configuration de:

Quelle syntaxe serait le mieux pour la mise en correspondance de modèle de chaîne Uri? (Suggestions bienvenues)

ResourceSpace.Has.ResourcesOfType<List<ContactResource>>() 
    .AtUri("/contacts") 
    .And.AtUri("/contacts?filterBy[]={filterBy}[]&filterValue[]={fv}[]") // Option 1 
    .And.AtUri("/contacts?filterBy={filterBy}[]&fv={fv}[]") // Option 2 

tracerait une méthode Handler de:

public object Get(params Filter[] filters) 
{ 
    /* 
    create a Linq Expression based on the filters using dynamic linq 
    query the repository using the Linq 
    */ 

    return Query.All<Contact>().Where(c => c.First == "Dave" && c.Last == "Smith").ToResource() 
} 

où le filtre est défini par

public class Filter 
{ 
    public string FilterBy { get; set; } 
    public string FilterValue { get; set; } 
} 
+0

Salut Scott, avez-vous trouvé une solution à la fin? Besoin de faire une chose similaire. –

Répondre

4

.AtUri("/contacts?filterBy={filterby}&filterValue={filterValue}") devrait carte avec plaisir à

Post(string[] filterby, string[] filterValues) 

Cela devrait avoir lieu ssed la bonne façon, sinon c'est un bug.

Vous pouvez également utiliser la syntaxe d'objet si vous voulez quelque chose d'un peu plus agréable:

<input name="Filter:0.FilterBy" /> 
<input name="Filter:1.FilterBy" /> 

et ont

Post(IEnuemrable<Filter> filter) 

Mais vous aurez probablement besoin d'utiliser un poste pour cela, pas un get . La façon habituelle de résoudre ceci est de faire une post-Redirect-Get à un URI entièrement construit, qui est également plus agréable pour la mise en cache

+0

+1 pour Post-Redirect-Get. –

+0

@serialseb Existe-t-il un meilleur moyen de filtrer le type de liste de ressources dans OpenRasta? – IsmailS

+0

non parce que le filtrage n'est pas un concept http, donc le fait de le faire d'une certaine façon en OU ferait le genre de décisions que le fx essaie de ne pas faire pour vous. – SerialSeb