2017-05-14 2 views
3

J'ai une chaîne de requête provenant d'une grille jquery que j'essaie d'analyser dans les paramètres de l'API Web C#, mais je n'arrive pas à obtenir une des propriétés à remplir.C# WebApi Analyseur de paramètres de requête

chaîne de requête:

?current=1&rowCount=10&sort[received]=desc&sort[email]=asc&sort[id]=desc&searchPhrase= 

Méthode:

public IEnumerable<IUserDto> Get(int current, int rowCount, NameValueCollection sort, string searchPhrase) 

Le paramètre 'type' est toujours nul, tous les autres correctement renseigner. J'ai essayé plusieurs types pour le paramètre mais peu importe ce que j'ai essayé je me retrouve toujours avec un paramètre nul.

Toute suggestion ou direction du type de paramètre serait apprécié.

Répondre

0

Si vous souhaitez désérialiser une valeur d'agrégat complexe, telle qu'un NameValueCollection à partir d'une chaîne de requête, vous devez décorer le paramètre avec FromUriAttribute. Cela ne garantit pas que cela fonctionnera par quelque moyen que ce soit mais sinon cela ne fonctionnera que si vous avez défini un gestionnaire de paramètres personnalisé. De plus, vous devez vous assurer que ce que vous numérotez dans votre URL est en fait un dictionnaire au format JSON. A partir de l'URL que vous avez publié, il semble que vous ajoutez les received, id et email propriétés d'un objet local en tant que paramètres de chaîne de requête individuelle

&sort[received]=desc&sort[email]=asc&sort[id]=desc 

paramètre de WebAPI contraignant ne va pas agréger automatiquement ceux-ci dans un dictionnaire pour toi.

Vous pouvez construire comme

var sortParam = ['received', 'id', 'email'].reduce(function (o, key) { 
    o[key] = sort[key]; 
    return o; 
}, {}); 

var queryParams = '?current=' + 1 + 
        '&rowCount' = 10 + 
        '&sort=' + JSON.stringify(sortParam) + 
        '&searchPhrase=' + something; 

Je suggère également de changer l'ordre pour que le paramètre sort est le dernier.

+0

J'ai essayé la solution, mais le paramètre de tri est Tributaire retour comme nulle, j'ai aussi essayé; '[FromUri] Dictionnaire [chaîne, chaîne] sort' ' [FromUri] Liste > sort' –

+0

^^ signifiait '[FromUri] Dictionary sort' –