2017-04-13 1 views
4

Je veux faire this, mais je veux également pouvoir transmettre des tableaux dans la chaîne de requête. J'ai essayé des choses comme:Passer le tableau dans la chaîne de requête de routage principal ASP.NET

http://www.sitename.com/route?arr[]=this&arr[]=that 
http://www.sitename.com/route?arr[]=this&that 
http://www.sitename.com/route?arr[0]=this&arr[1]=that 
http://www.sitename.com/route?arr0=this&arr1=that 
http://www.sitename.com/route?arr=this&arr=that 

Et ma route dans le code C# ressemble à ceci:

[Route("route")] 
[HttpGet] 
public void DoSomething(string[] values) 
{ 
    // ... 
} 

Mais dans tous ces cas, les valeurs est toujours nulle quand il obtient le code C# . Qu'est-ce que j'ai besoin de ma chaîne de requête pour passer un tableau de chaînes?

+1

ne pense pas que cela soit possible – Alexan

+0

Votre nom de paramètre ne correspond pas. Changez arr ou valeurs. – Tratcher

Répondre

6

Utilisez un nom de paramètre dans la chaîne de requête. Si vous avez une action:

public void DoSomething(string[] values) 

Utilisez ensuite values dans la chaîne de requête pour passer un tableau à un serveur:

?values=this&values=that 
+0

C'est dans la liste des choses que j'ai essayées. Cela n'a pas fonctionné pour moi. – user3685285

+0

@ user3685285, je l'ai vérifié et cela fonctionne comme décrit. Pourriez-vous passer une seule valeur à l'action comme 'Foo (valeur de chaîne)'? –

+0

@Tratcher que voulez-vous dire? Ça marche. –

0

En fin de compte, je viens de passer dans une seule chaîne délimitée, puis utilisée string.Split à séparer sur le côté serveur. Pas la plus jolie solution, mais ça marche. Jusqu'à ce que quelqu'un trouve une meilleure réponse, c'est tout ce que j'ai. Je dois réitérer que j'utilise. NET Core, et ces chaînes de requête sont spécifiques au framework.

2

Je devais faire quelque chose de similaire à cela, mais au lieu de chaînes, j'ai utilisé une liste de long pour passer un identifiant pour une recherche. En utilisant une option de sélection multiple, les valeurs choisies sont envoyées à la méthode (via get) comme ceci:

[HttpGet("[action]")] 
public IActionResult Search(List<long> idsSelected) 
{ 
    ///do stuff here 
} 

J'utilise aussi Route("[controller]") avant la déclaration de classe. Fonctionne très bien, mais la liste des éléments est divisée en plusieurs paramètres dans l'URL, comme indiqué ci-dessous.

http://localhost:5000/Search/idsSelected=1&idsSelected=2