17 votes

Transmettre des valeurs de tableau dans une requête HTTP en .NET

Quelle est la méthode standard pour passer et traiter un tableau dans une requête HTTP en .NET ? J'ai une solution, mais je ne sais pas si c'est la meilleure approche.

Voici ma solution :

<form action="myhandler.ashx" method="post">
    <input type="checkbox" name="user" value="Aaron" />
    <input type="checkbox" name="user" value="Bobby" />
    <input type="checkbox" name="user" value="Jimmy" />
    <input type="checkbox" name="user" value="Kelly" />
    <input type="checkbox" name="user" value="Simon" />
    <input type="checkbox" name="user" value="TJ" />

    <input type="submit" value="Submit" />
</form>

Le gestionnaire ASHX reçoit le paramètre "user" sous la forme d'une chaîne de caractères délimitée par des virgules. Vous pouvez facilement obtenir les valeurs en divisant la chaîne :

public void ProcessRequest(HttpContext context)
    {
        string[] users = context.Request.Form["user"].Split(',');
    }

J'ai donc déjà une réponse à mon problème : assigner plusieurs valeurs au même nom de paramètre, supposer que le gestionnaire ASHX le reçoit sous la forme d'une chaîne délimitée par des virgules, et diviser la chaîne. Ma question est de savoir si c'est ainsi que l'on procède généralement en .NET.

Quelle est la pratique habituelle en la matière ? Existe-t-il un moyen plus simple de récupérer les valeurs multiples que de supposer que la valeur est délimitée par des virgules et d'appeler Split() sur cette valeur ? Est-ce ainsi que les tableaux sont généralement transmis dans .NET, ou utilise-t-on plutôt XML ?

Quelqu'un a-t-il une idée sur la question de savoir s'il s'agit ou non de la meilleure approche ?

37voto

Guffa Points 308133

Il n'y a pas vraiment de norme, mais ce que vous utilisez est ce qui s'en rapproche le plus.

Cependant, les valeurs sont en réalité no sont envoyées sous la forme d'une chaîne séparée par des virgules, elles sont envoyées sous la forme de valeurs distinctes portant le même nom. Les données du formulaire de votre exemple ressembleront à ceci :

user=Aaron&user=Bobby&user=Jimmy&user=Kelly&user=Simon&user=TJ

Vous pouvez lire les valeurs sous forme de tableau directement comme suit :

string[] users = context.Request.Form.GetValues("user");

Si vous utilisez Form["user"] il concaténera les valeurs pour vous et vous devrez les diviser à nouveau. C'est une perte de temps et cela ne fonctionne pas si l'une des valeurs contient une virgule.

2voto

Ray Points 12711

Si vous utilisez des cases à cocher ou une liste à choix multiples, vous obtiendrez automatiquement un ensemble de valeurs séparées par des virgules en html. Ce que vous faites est parfaitement correct. Si vous générez un tableau dans votre javascript d'une autre manière, vous pourriez générer une chaîne séparée par des virgules et l'assigner à un champ caché, et utiliser split() sur le serveur de la même manière. XML est certainement une autre option, mais elle me semble trop complexe si tout ce que vous voulez faire est de passer un simple tableau de nombres ou de chaînes courtes. (Bien entendu, si les valeurs des chaînes que vous devez transmettre contiennent des virgules, votre plan simple s'en trouvera perturbé).

0voto

Prakhar Londhe Points 1226

J'ai rencontré le même problème et j'ai conçu une nouvelle solution qui utilise JSON, ce qui rend la demande plus succincte et plus lisible.

Les paramètres de la demande d'accès sont les suivants ?users=['Joe','Simon','Carol']

et du côté du serveur, nous utilisons Newtonsoft.Json pour convertir la chaîne de caractères entrante en un tableau de chaînes de caractères.

string result = context.Request.Form.GetValues("user");
string[] users = JsonConvert.DeserializeObject<string[]>(result);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X